声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1512|回复: 11

[综合讨论] 请教一个数值积分的问题

[复制链接]
发表于 2007-7-17 22:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
大概的情况是这样的
例如:有两个非常复杂的函数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
 楼主| 发表于 2007-7-18 09:13 | 显示全部楼层

回复 #2 花如月 的帖子

函数里边如果还有其他的变量 积分的时候其他的变量要给数值
如何实现啊?
多谢
 楼主| 发表于 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
 楼主| 发表于 2007-7-18 09:27 | 显示全部楼层

回复 #4 yanice 的帖子

如果f里边还有另外一个函数t(x),进行数值运算的时候为了简单,没有带入具体的函数表达式,而是用函数名t(x)来进行计算的。最后数值积分还是要将t(x)代入的,如何来实现?
发表于 2007-7-18 14:57 | 显示全部楼层

回复 #5 yanice 的帖子

自己多摸索摸索吧,每个人的问题都有特殊性。共性的地方,可以帮你分析以下,特殊性的地方就需要自己多思考了!否则就和完全给你做这道题目没什么分别了。
 楼主| 发表于 2007-7-18 15:09 | 显示全部楼层

回复 #6 花如月 的帖子

我自己的方法很笨,就是全部用函数的符号形式代进去。最后计算
不过感觉效率很低的样子,过来问问有没有好的办法
发表于 2007-7-18 16:02 | 显示全部楼层
你这样讲就是有高手,也没法帮你做。因为根本看不到你的问题,实际上你的问题描述的很是模糊。希望别人给你指导方法,这样问是可以的。如果希望别人改进你程序,你不帖出来,没人会看到你的实质性问题。  注意提问的方法,你想得到什么答案就需要相应的提问技巧。有程序了,指不定那个路过的高人就帮你搞定了

评分

1

查看全部评分

发表于 2007-7-18 16:33 | 显示全部楼层
的确是问题绕来饶去没有讲清楚.
你的另一个帖子似乎也混淆了字符与符号的区别.
 楼主| 发表于 2007-7-18 16:52 | 显示全部楼层

回复 #9 xjzuo 的帖子

搞不太清楚字符与符号的区别
一般用的是不是符号?
进行积分微分运算的是不是字符?
谁给我解释一下 手上的参考书讲得很模糊
 楼主| 发表于 2007-7-18 17:01 | 显示全部楼层

回复 #8 花如月 的帖子

就是这个问题
syms a b c d
T=[a,b;c,d];
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 编辑 ]
发表于 2007-10-8 22:24 | 显示全部楼层
弱弱的问下:生成内联函数时直接用inline(f)也可以把,为什么要用char(f)把f转换成字符表达式呢,好像直接用符号表达式还更好些吧?
还有,如果数值积分的结果为NaN,是表示不收敛吗?我的积分区间是0~inf,当上限取一个较大的数时结果还为一个约为0的值
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-12 03:45 , Processed in 0.071346 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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