yanice 发表于 2007-7-17 22:53

请教一个数值积分的问题

大概的情况是这样的
例如:有两个非常复杂的函数f(x) 和g(x),变量不仅仅是x,还有y,z等等许多,这里举例就是一个了。
f(x) 和g(x)经过复杂的符号运算得到一个函数H(x),
然后又要对H(x)数值积分来得到数值结果。
用f(x)和g(x)得到的H(x)是字符型的,后边的积分不能用字符型的。
这个过程用matlab编程序来自动实现是一个什么流程 要用什么函数?
多谢

[ 本帖最后由 eight 于 2007-7-19 14:49 编辑 ]

花如月 发表于 2007-7-18 09:09

>> f=sym('sin(x)+cos(x)')

f =

sin(x)+cos(x)


>> quad(inline(char(f)),0,pi)

ans =

    2.0000

yanice 发表于 2007-7-18 09:13

回复 #2 花如月 的帖子

函数里边如果还有其他的变量 积分的时候其他的变量要给数值
如何实现啊?
多谢

yanice 发表于 2007-7-18 09:23

回复 #3 yanice 的帖子

知道了
>> f=sym('x*y*z')

f =

x*y*z
>> g=inline(char(f),'x','y','z')

g =

   Inline function:
   g(x,y,z) = x*y*z
>> quad(@(x)g(x,1,3),1,4)

ans =

   22.5000

yanice 发表于 2007-7-18 09:27

回复 #4 yanice 的帖子

如果f里边还有另外一个函数t(x),进行数值运算的时候为了简单,没有带入具体的函数表达式,而是用函数名t(x)来进行计算的。最后数值积分还是要将t(x)代入的,如何来实现?

花如月 发表于 2007-7-18 14:57

回复 #5 yanice 的帖子

自己多摸索摸索吧,每个人的问题都有特殊性。共性的地方,可以帮你分析以下,特殊性的地方就需要自己多思考了!否则就和完全给你做这道题目没什么分别了。

yanice 发表于 2007-7-18 15:09

回复 #6 花如月 的帖子

我自己的方法很笨,就是全部用函数的符号形式代进去。最后计算
不过感觉效率很低的样子,过来问问有没有好的办法

花如月 发表于 2007-7-18 16:02

你这样讲就是有高手,也没法帮你做。因为根本看不到你的问题,实际上你的问题描述的很是模糊。希望别人给你指导方法,这样问是可以的。如果希望别人改进你程序,你不帖出来,没人会看到你的实质性问题。注意提问的方法,你想得到什么答案就需要相应的提问技巧。有程序了,指不定那个路过的高人就帮你搞定了

xjzuo 发表于 2007-7-18 16:33

的确是问题绕来饶去没有讲清楚.
你的另一个帖子似乎也混淆了字符与符号的区别.

yanice 发表于 2007-7-18 16:52

回复 #9 xjzuo 的帖子

搞不太清楚字符与符号的区别
一般用的是不是符号?
进行积分微分运算的是不是字符?
谁给我解释一下 手上的参考书讲得很模糊

yanice 发表于 2007-7-18 17:01

回复 #8 花如月 的帖子

就是这个问题
syms a b c d
T=;
TT=inv(T);
a=a(x,y,z,w);
b=b(x,y,z,w);
c=c(x,y,z,w);
d=d(x,y,z,w);
V=TT(x,y0,z0,w0)*T(x,y1,z1,w1);
至此得到的是一个符号型的矩阵V
然后要对V的每一项对x进行积分,y,z,w是给定值
不知道这次说清楚了没有

另外一个问题就是比如
y=syms('a*x');
在函数文件里边定义
function z=f(y,x,a)
函数功能就是返回a*x的值;
一般情况下我们是这样写
function y=f(x,a)
y=a*x;
但是现在函数体里边的表达式是字符型的
我想象原来一样那样可以在函数里边写
不知道如何实现

[ 本帖最后由 yanice 于 2007-7-18 17:04 编辑 ]

skysurfer 发表于 2007-10-8 22:24

弱弱的问下:生成内联函数时直接用inline(f)也可以把,为什么要用char(f)把f转换成字符表达式呢,好像直接用符号表达式还更好些吧?
还有,如果数值积分的结果为NaN,是表示不收敛吗?我的积分区间是0~inf,当上限取一个较大的数时结果还为一个约为0的值
页: [1]
查看完整版本: 请教一个数值积分的问题