声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 11770|回复: 15

[编程技巧] Undefined function or method 'isfinite' for input arguments of type 'sym'

[复制链接]
发表于 2008-2-20 20:19 | 显示全部楼层 |阅读模式

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

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

x
求贴图中表达式含参量定积分,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 编辑 ]

数学表达式

数学表达式
回复
分享到:

使用道具 举报

发表于 2008-2-20 20:48 | 显示全部楼层
原帖由 flaml 于 2008-2-20 20:19 发表
求贴图中表达式含参量定积分,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 自行看看相关例子
 楼主| 发表于 2008-2-20 21:03 | 显示全部楼层
请教,那么怎么样才能求该表达式的积分函数呢?
发表于 2008-2-20 21:05 | 显示全部楼层

回复 3楼 的帖子

你求的是数值,还是关于r的表达式
 楼主| 发表于 2008-2-20 21:19 | 显示全部楼层
原帖由 sigma665 于 2008-2-20 21:05 发表
你求的是数值,还是关于r的表达式


要知道r的表达式。
如果只想知道某个r时的值,这个就f1表达式方法啊,它没有错。
这个类型的问题我多次遇到了。含参量的积分在工程中很常见,被积函数遇到复杂的就无从下手了。希望高手指导下,解决这类问题。

[ 本帖最后由 flaml 于 2008-2-20 22:13 编辑 ]
发表于 2008-2-21 11:48 | 显示全部楼层

回复 5楼 的帖子

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

关于含参数的积分,请搜索精华贴,里面很详细
发表于 2008-2-21 14:54 | 显示全部楼层
参照我的示例贴,作一个循环即可。
 楼主| 发表于 2008-2-22 03:31 | 显示全部楼层
原帖由 xjzuo 于 2008-2-21 14:54 发表
参照我的示例贴,作一个循环即可。

楼上大哥啊,我找了半天也找不到啊。这个问题我急需要解决,我每次做到这里就卡壳。
我又熬夜弄了,依然卡这里,搞不定,多谢大哥指点啊。
发表于 2008-2-22 10:05 | 显示全部楼层

回复 8楼 的帖子

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

http://forum.vibunion.com/forum/thread-42369-1-1.html [示例] 关于带参数的积分问题
发表于 2008-2-22 10:38 | 显示全部楼层
原帖由 flaml 于 2008-2-22 03:31 发表

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


版面的置顶区就有,为何不好好找找?就在热点问题讨论中
 楼主| 发表于 2008-2-22 11:59 | 显示全部楼层
原帖由 sigma665 于 2008-2-22 10:05 发表
他是说,让r循环,对应于不同的r有一个对应的值,就可以画出曲线了

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


大哥,我要是想得到的结果是关于r的函数啊,这需要符号运算啊,那该问题怎么办啊?我并不是用来画曲线啊。
找到示例了,多谢啊,示例中的积分区域是个不带参量的定积分,积分区域固定,假如积分区域含参量,如积分上限为参数r,那么得到的应该是个含有该参量的表达式。

[ 本帖最后由 flaml 于 2008-2-22 12:01 编辑 ]
发表于 2008-2-22 14:04 | 显示全部楼层

回复 11楼 的帖子

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

符号积分很慢,效率低,积出来的表达式也可能是一长串
 楼主| 发表于 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用多了,自然就熟悉啦,还是“用”字第一啊!

评分

1

查看全部评分

 楼主| 发表于 2008-2-22 15:01 | 显示全部楼层
原帖由 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 ...


结果有错误,因为F=int('funf',0,r)中,把funf当成一个变量,结果F=1/2*r^2.
输入F=int('funf')得到:
F =

1/2*funf^2

而去掉引号后,int是无法对该表达式积分的,请教各位大侠,如何解决啊?
发表于 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 = [cos(x*t),sin(x*t);-sin(x*t),cos(x*t)];
      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([exp(t),exp(alpha*t)])  returns  [exp(t), 1/alpha*exp(alpha*t)]
      int(A,t)                 returns      [sin(x*t)/x, -cos(x*t)/x]
                                            [cos(x*t)/x,  sin(x*t)/x]
    Overloaded methods:
       char/int
       filtstates.int

[ 本帖最后由 eight 于 2008-2-22 15:54 编辑 ]

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-26 01:26 , Processed in 0.074681 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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