flaml 发表于 2008-2-20 20:19

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 编辑 ]

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 自行看看相关例子

flaml 发表于 2008-2-20 21:03

请教,那么怎么样才能求该表达式的积分函数呢?

sigma665 发表于 2008-2-20 21:05

回复 3楼 的帖子

你求的是数值,还是关于r的表达式

flaml 发表于 2008-2-20 21:19

原帖由 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 编辑 ]

sigma665 发表于 2008-2-21 11:48

回复 5楼 的帖子

quadl是数值积分,你说的是符号积分用int

关于含参数的积分,请搜索精华贴,里面很详细

xjzuo 发表于 2008-2-21 14:54

参照我的示例贴,作一个循环即可。

flaml 发表于 2008-2-22 03:31

原帖由 xjzuo 于 2008-2-21 14:54 发表 http://www.chinavib.com/forum/images/common/back.gif
参照我的示例贴,作一个循环即可。
楼上大哥啊,我找了半天也找不到啊。这个问题我急需要解决,我每次做到这里就卡壳。
我又熬夜弄了,依然卡这里,搞不定,多谢大哥指点啊。

sigma665 发表于 2008-2-22 10:05

回复 8楼 的帖子

他是说,让r循环,对应于不同的r有一个对应的值,就可以画出曲线了

http://forum.vibunion.com/forum/thread-42369-1-1.html [示例] 关于带参数的积分问题

eight 发表于 2008-2-22 10:38

原帖由 flaml 于 2008-2-22 03:31 发表 http://www.chinavib.com/forum/images/common/back.gif

楼上大哥啊,我找了半天也找不到啊。这个问题我急需要解决,我每次做到这里就卡壳。
我又熬夜弄了,依然卡这里,搞不定,多谢大哥指点啊。

版面的置顶区就有,为何不好好找找?就在热点问题讨论中

flaml 发表于 2008-2-22 11:59

原帖由 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 编辑 ]

sigma665 发表于 2008-2-22 14:04

回复 11楼 的帖子

那就不要用quadl
符号积分是int
自己先help int 一下吧

符号积分很慢,效率低,积出来的表达式也可能是一长串

flaml 发表于 2008-2-22 14:48

可以了,代码如下:
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 15:01

原帖由 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是无法对该表达式积分的,请教各位大侠,如何解决啊?

sigma665 发表于 2008-2-22 15:10

回复 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
查看完整版本: Undefined function or method 'isfinite' for input arguments of type 'sym'