找回密码
 注册
Simdroid-非首页
查看: 242|回复: 6

[编程进阶] mathematica中多元函数的定义及调用

[复制链接]
发表于 2011-8-3 22:29:57 | 显示全部楼层 |阅读模式 来自 陕西西安
本帖最后由 紫电青霜 于 2011-8-4 09:54 编辑

我是新手,想用mathematica编一个算法,这个算法在计算时需要调用定义的函数对表进行计算,求得值后决定这个表的去和留。但是这个函数是多元函数,比如f[x_,y_,z_]:=x^2+y^3-Log[z];f[1,3,5];是一种定义方法,但是当自变量数目为100或者更多时,怎么定义?
如果用xnum = Table[xi,{i, 1, 10}]];来定义(Xi,i为下标),fun = Sum[xnum, {i, 1, 10}];
fun=Compile[xnum,fun];fun[1,1,1,1,1,1,1,1,1,1];运行时为什么不对?还有在调用fun时,自变量的值是个表,在本例中是个含有十个元素的向量,表有{},怎么去掉{}而实现调用?希望大侠可以帮帮我!感激不尽!!!
发表于 2011-8-4 10:13:09 | 显示全部楼层 来自 上海
Simdroid开发平台
本帖最后由 eigen 于 2011-8-4 10:22 编辑

回复 1# 紫电青霜

你程序中的错误:
1. xnum = Table[xi,{i, 1, 10}]] 中的“xi”要写成“Subscript[x, i],”,才是下标的意思;
2.上式多了个右括号;
可以改成:

  1. xnum=Table[Subscript[x,i],{i,10}]
  2. fun=Sum[xnum[[i]],{i,1,10}]
复制代码
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-4 11:23:26 | 显示全部楼层 来自 陕西西安
谢谢大侠指教,因为上面的不好表示,所以我在编辑帖子的时候把下标改了下,你说的确实对!我想了一下可以这样定义:s = Module[{xnum = Table[Subscript[x, i], {i, 1, 10}]}, Sum[xnum[[i]], {i, 1, 10}]];但是调用的时候要根据不同的表值来求得s,这个怎么实现呢?
回复 不支持

使用道具 举报

发表于 2011-8-4 11:34:56 | 显示全部楼层 来自 上海
本帖最后由 eigen 于 2011-8-4 11:39 编辑

你可以这样实现

  1. n:=Length[{2,3}]
  2. xnum:=Table[Subscript[x,i],{i,n}]
  3. fun:=Sum[xnum[[i]],{i,1,n}]
  4. xnum := {2, 3}
  5. fun

  6. n:=Length[{2,3,6,8}]
  7. xnum:=Table[Subscript[x,i],{i,n}]
  8. fun:=Sum[xnum[[i]],{i,1,n}]
  9. xnum:={2,3,6,8}
  10. fun
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-4 15:10:10 | 显示全部楼层 来自 陕西西安
回复 4# eigen

恩,明白了,能得到类似于matlab中function的结果,很不错,谢谢!
回复 不支持

使用道具 举报

发表于 2011-8-4 16:44:23 | 显示全部楼层 来自 江苏徐州
回复 1# 紫电青霜


   
学习使用 Apply。
不要局限在函数的概念里。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-4 19:26:18 | 显示全部楼层 来自 陕西西安
回复 6# guocong89
谢谢版主。。。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-26 11:42 , Processed in 0.057243 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表