请教一个数值积分的问题
大概的情况是这样的例如:有两个非常复杂的函数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 编辑 ] >> f=sym('sin(x)+cos(x)')
f =
sin(x)+cos(x)
>> quad(inline(char(f)),0,pi)
ans =
2.0000
回复 #2 花如月 的帖子
函数里边如果还有其他的变量 积分的时候其他的变量要给数值如何实现啊?
多谢
回复 #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
回复 #4 yanice 的帖子
如果f里边还有另外一个函数t(x),进行数值运算的时候为了简单,没有带入具体的函数表达式,而是用函数名t(x)来进行计算的。最后数值积分还是要将t(x)代入的,如何来实现?回复 #5 yanice 的帖子
自己多摸索摸索吧,每个人的问题都有特殊性。共性的地方,可以帮你分析以下,特殊性的地方就需要自己多思考了!否则就和完全给你做这道题目没什么分别了。回复 #6 花如月 的帖子
我自己的方法很笨,就是全部用函数的符号形式代进去。最后计算不过感觉效率很低的样子,过来问问有没有好的办法 你这样讲就是有高手,也没法帮你做。因为根本看不到你的问题,实际上你的问题描述的很是模糊。希望别人给你指导方法,这样问是可以的。如果希望别人改进你程序,你不帖出来,没人会看到你的实质性问题。注意提问的方法,你想得到什么答案就需要相应的提问技巧。有程序了,指不定那个路过的高人就帮你搞定了 的确是问题绕来饶去没有讲清楚.
你的另一个帖子似乎也混淆了字符与符号的区别.
回复 #9 xjzuo 的帖子
搞不太清楚字符与符号的区别一般用的是不是符号?
进行积分微分运算的是不是字符?
谁给我解释一下 手上的参考书讲得很模糊
回复 #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 编辑 ] 弱弱的问下:生成内联函数时直接用inline(f)也可以把,为什么要用char(f)把f转换成字符表达式呢,好像直接用符号表达式还更好些吧?
还有,如果数值积分的结果为NaN,是表示不收敛吗?我的积分区间是0~inf,当上限取一个较大的数时结果还为一个约为0的值
页:
[1]