Undefined function or method 'isfinite' for input arguments of type 'sym'
求贴图中表达式含参量定积分,r为变量。close all
clear all
clc
syms r
strp=strcat('besselk(1,x)./(besseli(1,x).*besselk(0,x)+besselk(1,x).*besseli(0,x))');
funf=inline(strp,'x');
f1=quadl(funf,0,1)
F=quadl(funf,0,r)
运行上述计算出现下述错误。
f1 =
0.8215
??? Undefined function or method 'isfinite' for input arguments of type 'sym'.
Error in ==> quadl at 68
if ~isfinite(y(1))
我搜索论坛了,找不到原因,故此请教,请轻拍啊。实出无奈,请高手指点。
[ 本帖最后由 eight 于 2008-2-20 20:48 编辑 ] 原帖由 flaml 于 2008-2-20 20:19 发表 http://www.chinavib.com/forum/images/common/back.gif
求贴图中表达式含参量定积分,r为变量。
close all
clear all
clc
syms r
strp=strcat('besselk(1,x)./(besseli(1,x).*besselk(0,x)+besselk(1,x).*besseli(0,x))');
funf=inline(strp,'x');
f1=quadl(funf,0 ...
r1 是符号变量, isfinite 函数不支持。请help quadl 自行看看相关例子 请教,那么怎么样才能求该表达式的积分函数呢?
回复 3楼 的帖子
你求的是数值,还是关于r的表达式 原帖由 sigma665 于 2008-2-20 21:05 发表 http://www.chinavib.com/forum/images/common/back.gif你求的是数值,还是关于r的表达式
要知道r的表达式。
如果只想知道某个r时的值,这个就f1表达式方法啊,它没有错。
这个类型的问题我多次遇到了。含参量的积分在工程中很常见,被积函数遇到复杂的就无从下手了。希望高手指导下,解决这类问题。
[ 本帖最后由 flaml 于 2008-2-20 22:13 编辑 ]
回复 5楼 的帖子
quadl是数值积分,你说的是符号积分用int关于含参数的积分,请搜索精华贴,里面很详细 参照我的示例贴,作一个循环即可。 原帖由 xjzuo 于 2008-2-21 14:54 发表 http://www.chinavib.com/forum/images/common/back.gif
参照我的示例贴,作一个循环即可。
楼上大哥啊,我找了半天也找不到啊。这个问题我急需要解决,我每次做到这里就卡壳。
我又熬夜弄了,依然卡这里,搞不定,多谢大哥指点啊。
回复 8楼 的帖子
他是说,让r循环,对应于不同的r有一个对应的值,就可以画出曲线了http://forum.vibunion.com/forum/thread-42369-1-1.html [示例] 关于带参数的积分问题 原帖由 flaml 于 2008-2-22 03:31 发表 http://www.chinavib.com/forum/images/common/back.gif
楼上大哥啊,我找了半天也找不到啊。这个问题我急需要解决,我每次做到这里就卡壳。
我又熬夜弄了,依然卡这里,搞不定,多谢大哥指点啊。
版面的置顶区就有,为何不好好找找?就在热点问题讨论中 原帖由 sigma665 于 2008-2-22 10:05 发表 http://www.chinavib.com/forum/images/common/back.gif
他是说,让r循环,对应于不同的r有一个对应的值,就可以画出曲线了
http://www.chinavib.com/forum/thread-42369-1-1.html [示例] 关于带参数的积分问题
大哥,我要是想得到的结果是关于r的函数啊,这需要符号运算啊,那该问题怎么办啊?我并不是用来画曲线啊。
找到示例了,多谢啊,示例中的积分区域是个不带参量的定积分,积分区域固定,假如积分区域含参量,如积分上限为参数r,那么得到的应该是个含有该参量的表达式。
[ 本帖最后由 flaml 于 2008-2-22 12:01 编辑 ]
回复 11楼 的帖子
那就不要用quadl符号积分是int
自己先help int 一下吧
符号积分很慢,效率低,积出来的表达式也可能是一长串 可以了,代码如下:
close all
clear all
clc
syms r
strp=strcat('besselk(1,x)./(besseli(1,x).*besselk(0,x)+besselk(1,x).*besseli(0,x))');
funf=inline(strp,'x');
f1=quadl(funf,0,1)
F=int('funf',0,r)
我上次用int了,报错,所以放弃了这个方案,原来当时函数少加了个引号。希望各位引以为鉴。
Matlab用多了,自然就熟悉啦,还是“用”字第一啊! 原帖由 flaml 于 2008-2-22 14:48 发表 http://www.chinavib.com/forum/images/common/back.gif
可以了,代码如下:
close all
clear all
clc
syms r
strp=strcat('besselk(1,x)./(besseli(1,x).*besselk(0,x)+besselk(1,x).*besseli(0,x))');
funf=inline(strp,'x');
f1=quadl(funf,0,1)
F=int('funf',0 ...
结果有错误,因为F=int('funf',0,r)中,把funf当成一个变量,结果F=1/2*r^2.
输入F=int('funf')得到:
F =
1/2*funf^2
而去掉引号后,int是无法对该表达式积分的,请教各位大侠,如何解决啊?
回复 14楼 的帖子
应该是没有引号的去掉引号后有什么错误提示?
我来贴吧,错误如下:
??? Undefined function or method 'int' for input arguments of type 'inline'.
int里的fun也应该是sym型,不是inline型
help int
--- help for sym/int ---
INT Integrate.
INT(S) is the indefinite integral of S with respect to its symbolic
variable as defined by FINDSYM. S is a SYM (matrix or scalar).
If S is a constant, the integral is with respect to 'x'.
INT(S,v) is the indefinite integral of S with respect to v. v is a
scalar SYM.
INT(S,a,b) is the definite integral of S with respect to its
symbolic variable from a to b. a and b are each double or
symbolic scalars.
INT(S,v,a,b) is the definite integral of S with respect to v
from a to b.
Examples:
syms x x1 alpha u t;
A = ;
int(1/(1+x^2)) returns atan(x)
int(sin(alpha*u),alpha)returns -cos(alpha*u)/u
int(besselj(1,x),x) returns -besselj(0,x)
int(x1*log(1+x1),0,1) returns 1/4
int(4*x*t,x,2,sin(t)) returns 2*sin(t)^2*t-8*t
int()returns
int(A,t) returns
Overloaded methods:
char/int
filtstates.int
[ 本帖最后由 eight 于 2008-2-22 15:54 编辑 ]
页:
[1]
2