inline函数出错问题
inline函数提示是输入必须为字符串,不过没有看出哪儿错,请教一下各位~~,谢谢………………………………symsphis2 phitheta thetas phis; %定义符号函数:
phi2 = q2s * phis;
phitheta = phis + ( thetas0 + thetas );
y2 = linspace(y2min,y2max,10); %产生等差数列,y2为y2min至y2max之间共10个数
options = optimset('Display','off');
……………………
for k = 1:10
ysc2 = y2(k) + (rbs*(sin(phi2)*(sin(phitheta)-thetas*cos(phitheta))+cos(phi2)/(q2s*cos(phitheta))));
ysc2 = vpa(subs(ysc2),4);
yfc2 = inline('ysc2'); %已按花如月建议修改
thetaslist(k,:) = linspace(thetaslimits(k,1),thetaslimits(k,2),10);%#ok<AGROW>%thetas的取值矩阵
for m = 1:10
phisnum(k,m) = fzero(yfc2,0,options,thetaslist(k,m)); %#ok<AGROW>%phis的取值矩阵
end
end
………………………………错误提示是:
ysc2 =-300.+46.98*sin(.2000*phis)*(sin(phis+.6364e-1+thetas)-1.*thetas*cos(phis+.6364e-1+thetas))+234.9*cos(.2000*phis)/cos(phis+.6364e-1+thetas)
??? Error using ==> inline.inline at 47
Input must be a string.
Error in ==> FaceGear at 58
yfc2 = inline(ysc2);
[ 本帖最后由 eight 于 2007-10-8 11:10 编辑 ] 原帖由 zqllc 于 2007-10-8 09:46 发表 http://www.chinavib.com/forum/images/common/back.gif
inline函数提示是输入必须为字符串,不过没有看出哪儿错,请教一下各位~~,谢谢
………………………………
symsphis2 phitheta thetas phis; %定义符号函数:
phi2 = q2s * phis ...
yfc2 = inline(ysc2);改为 yfc2 = inline('ysc2');试试看 谢谢
原帖由 花如月 于 2007-10-8 10:17 发表 http://www.chinavib.com/forum/images/common/back.gif
yfc2 = inline(ysc2);改为 yfc2 = inline('ysc2');试试看
我把上面帖子改了一下,顺便贴出下面几句。
还是出错。
??? Error using ==> fzero at 317
FZERO cannot continue because user supplied inline object ==> yfc2
failed with the error below.
Error using ==> inline.subsref at 17
Too many inputs to inline function.
Error in ==> FaceGear at 61
phisnum(k,m) = fzero(yfc2,0,options,thetaslist(k,m)); %#ok<AGROW>%phis的取值矩阵
输入我数了一下,不多啊。除了几个syms定义的,其他其他都应该是double的。
[ 本帖最后由 eight 于 2007-10-8 11:10 编辑 ] inline函数里面只能有一个syms定义变量么?
输入两个就too many了?
我再看一下fzero函数
[ 本帖最后由 zqllc 于 2007-10-8 10:49 编辑 ] 版面有很多 inline 函数的使用实例,请搜索一下
回复 #3 zqllc 的帖子
一个一个调试吧,不懂就看help文档或者搜索版面。inline函数的错误已经排除了,又提示的是fzero的错误。自己找找吧,我们可不能一句一句帮你改程序呀:handshake 原帖由 花如月 于 2007-10-8 11:38 发表 http://www.chinavib.com/forum/images/common/back.gif一个一个调试吧,不懂就看help文档或者搜索版面。inline函数的错误已经排除了,又提示的是fzero的错误。自己找找吧,我们可不能一句一句帮你改程序呀:handshake
收到,谢谢:) 若还有问题,将参数及thetaslimits一并贴一下.------这一般是发贴的基本常识,也便于别人调试,提出建议. 原帖由 xjzuo 于 2007-10-8 23:47 发表 http://www.chinavib.com/forum/images/common/back.gif
若还有问题,将参数及thetaslimits一并贴一下.------这一般是发贴的基本常识,也便于别人调试,提出建议.
把问题简化了以下,出错还应该是inline函数的问题。
基本代码及错误信息是这样:
clear;
clc;
syms phis thetas;
thetaslist=randn(1,10);
options = optimset('Display','off');
ysc2 =-300.+46.98*sin(.2000*phis)*(sin(phis+.6364e-1+thetas)-1.*thetas*...
cos(phis+.6364e-1+thetas))+234.9*cos(.2000*phis)/cos(phis+.6364e-1+thetas);
yfc2 = inline('ysc2');
for m = 1:10
ysc2=subs(ysc2,thetas,thetaslist(m)); %
phisnum(m) = fzero(yfc2,0,options,thetaslist(m));%phis的取值矩阵
end
错误提示信息是:
??? Error using ==> fzero at 317
FZERO cannot continue because user supplied inline object ==> yfc2
failed with the error below.
Error using ==> inline.subsref at 17
Too many inputs to inline function.
Error in ==> test_inline at 11
phisnum(m) = fzero(yfc2,0,options,thetaslist(m));%phis的取值矩阵
回复 #9 zqllc 的帖子
完全属于输入不规范和语法错误导致的问题,下次用函数前还是仔细读读帮助文档和例子clear;clc;
syms phis thetas;
thetaslist=randn(1,10);
options = optimset('Display','off');
ysc='-300.+46.98*sin(.2000*phis)*(sin(phis+.6364e-1+thetas)-1.*thetas*cos(phis+.6364e-1+thetas))+234.9*cos(.2000*phis)/cos(phis+.6364e-1+thetas)';
yfc2 = inline(ysc);
for m = 1:10
ysc2=inline(subs(ysc,'thetas',thetaslist(m))); %
phisnum(m) = fzero(yfc2,0,options,thetaslist(m)); %phis的取值矩阵
end
phisnumphisnum =
Columns 1 through 9
-0.0155 -0.1905 -0.3319 0.2570 0.3925 0.3669 0.2727 0.0071 0.4249
Column 10
-0.6003
[ 本帖最后由 花如月 于 2007-10-9 21:12 编辑 ] 原帖由 花如月 于 2007-10-9 21:09 发表 http://www.chinavib.com/forum/images/common/back.gif
完全属于输入不规范和语法错误导致的问题,下次用函数前还是仔细读读帮助文档和例子clear;
clc;
syms phis thetas;
thetaslist=randn(1,10);
options = optimset('Display','off');
ysc='-300.+46.98*sin( ...
收到,万分谢谢,以后还是要多多练习了。~~ 原帖由 花如月 于 2007-10-9 21:09 发表 http://www.chinavib.com/forum/images/common/back.gif
完全属于输入不规范和语法错误导致的问题,下次用函数前还是仔细读读帮助文档和例子clear;
clc;
syms phis thetas;
thetaslist=randn(1,10);
options = optimset('Display','off');
ysc='-300.+46.98*sin( ...
:@L 实在基础比较弱了。
若改成下面这种形式,加了一个循环,
clear;
clc;
syms phis thetas;
thetaslist=randn(1,10);
y2=randn(1,10)
options = optimset('Display','off');
for k = 1:10
ysc2 =y2(k)+46.98*sin(.2000*phis)*(sin(phis+.6364e-1+thetas)-1.*thetas*
cos(phis+.6364e-1+thetas))+234.9*cos(.2000*phis)/cos(phis+.6364e-1+thetas);
yfc2 = inline(ysc2);
for m = 1:10
%ysc2=subs(ysc2,thetas,thetaslist(m)); %
phisnum(m) = fzero(yfc2,0,options,thetaslist(m));%phis的取值矩阵
end
end
似乎写成
ysc2 ='y2(k)+46.98*sin(.2000*phis)*(sin(phis+.6364e-1+thetas)-1.*thetas*cos(phis+.6364e-1+thetas))+234.9*cos(.2000*phis)/cos(phis+.6364e-1+thetas)';
是行不通的。提示变为Error using ==> inline.subsref at 14
Not enough inputs to inline function.
写成 yfc2 = inline('ysc2')更是不对,
似乎中间缺少某个转换函数。不过不知道怎么用。
回复 #12 zqllc 的帖子
有必要弄个双循环么?你的目的到底是什么?是和第一次同样的错误,好好思考下吧 原帖由 花如月 于 2007-10-9 22:21 发表 http://www.chinavib.com/forum/images/common/back.gif有必要弄个双循环么?你的目的到底是什么?是和第一次同样的错误,好好思考下吧
循环是有必要的。
嗯,错误是一样的。我再仔细看看。谢谢 原帖由 花如月 于 2007-10-9 22:21 发表 http://www.chinavib.com/forum/images/common/back.gif
有必要弄个双循环么?你的目的到底是什么?是和第一次同样的错误,好好思考下吧
嗯。改用@函数可以避免这个问题。感觉还是inline函数有局限。双重循环有问题。
clear;
clc;
syms phis thetas;
thetaslist=randn(1,10);
y2=randn(1,10)
options = optimset('Display','off');
for k = 1:10
yfc2 = @(phis,thetas)(y2(k)+46.98*sin(.2000*phis)*(sin(phis+.6364e-1+thetas)-1.*thetas*cos(phis+.6364e-1+thetas))+234.9*cos(.2000*phis)/cos(phis+.6364e-1+thetas));
for m = 1:10
phisnum(m) = fzero(yfc2,0,options,thetaslist(m));%phis的取值矩阵
end
end
页:
[1]
2