[求助]有关对 inline的 问题
如果有这样的式子<br>fx=inline('a*tan(b*x*i)-c*tan(d*x*i)','x')<br><br>其中 a,b,c,d是通过计算得出的 ,不是直接的数字形式<br><br>但是 一般a,b,c,d是直接用数字形式可出的 所以在进行下一步计算的时候 就对a,b,c,d报错<br><br>应该这样处理,??[此贴子已经被cdwxg于2006-5-30 23:51:52编辑过]
回复:(qiuqia17)有关对 inline的 问题
什么意思?没懂,能否说的详细点回复:(qiuqia17)有关对 inline的 问题
简单的说 <BR> 例如 有fx=inline('x+1','x');<BR> 然后进行二分法 = bisct(fx,-2,2,1e-4,50); <BR>这样可以 算出 x+1=0的值<BR><BR> 但是 对 a=1;<BR> fx=inline('x+a','x');<BR> 然后 = bisct(fx,-2,2,1e-4,50); <BR>这个时候 会报错 说 a 没有定义~~<BR><BR> 应该怎么办?<BR>我想是不是 inline要直接进行值引用的 ..有没有办法 通过a 来进行计算的 <BR><BR>suffer ~~ 看这个 我解释清楚了吗<BR>回复:(qiuqia17)有关对 inline的 问题
<P>应该是bisect吧</P>回复:(qiuqia17)回复:(qiuqia17)有关对 inline的...
bisect 或者 bisct 这个 没有关系 <BR> 就是 inline 中 怎么把 这个a 加进去 然后 进行 下面的二分计算~~回复:(qiuqia17)有关对 inline的 问题
这个好像不能直接实现,需要修改你的bisct,增加一个传递变量来传递a回复:(qiuqia17)有关对 inline的 问题
<P>头痛~~指点指点<BR><BR>function = bisct(f,a,b,TolX,MaxIter)<BR>%bisct.m to solve f(x) = 0 by using the bisection method.<BR>%input : f = ftn to be given as a string ’f’ if defined in an M-file<BR>% a/b = initial left/right point of the solution interval<BR>% TolX = upperbound of error |x(k) - xo|<BR>% MaxIter = maximum # of iterations<BR>%output: x = point which the algorithm has reached<BR>% err = (b - a)/2(half the last interval width)<BR>% xx = history of x<BR>TolFun=eps; fa = feval(f,a); fb = feval(f,b);<BR>if fa*fb > 0, error('We must have f(a)f(b)<0!'); end<BR>for k = 1: MaxIter<BR>xx(k) = (a + b)/2;<BR>fx = feval(f,xx(k)); err = (b-a)/2;<BR>if abs(fx) < TolFun | abs(err)<TolX, break;<BR>elseif fx*fa > 0, a = xx(k); fa = fx;<BR>else b = xx(k);<BR>end<BR>end<BR>x = xx(k);<BR>if k == MaxIter, fprintf('The best in %d iterations\n',MaxIter), end<BR><BR>这是 二分法的代码<BR><BR>你是说在这里面加上a?</P>回复:(qiuqia17)有关对 inline的 问题
<P>看一下这样对不对<BR>a=1;<BR>fx=inline('x+aa');<BR> = bisct(fx,-2,2,1e-4,50,a);</P><P><BR>function = bisct(f,a,b,TolX,MaxIter,aa)<BR>%bisct.m to solve f(x) = 0 by using the bisection method.<BR>%input : f = ftn to be given as a string ’f’ if defined in an M-file<BR>% a/b = initial left/right point of the solution interval<BR>% TolX = upperbound of error |x(k) - xo|<BR>% MaxIter = maximum # of iterations<BR>%output: x = point which the algorithm has reached<BR>% err = (b - a)/2(half the last interval width)<BR>% xx = history of x<BR>TolFun=eps; fa = feval(f,aa,a); fb = feval(f,aa,b);<BR>if fa*fb > 0, error('We must have f(a)f(b)<0!'); end<BR>for k = 1: MaxIter<BR>xx(k) = (a + b)/2;<BR>fx = feval(f,aa,xx(k)); err = (b-a)/2;<BR>if abs(fx) < TolFun | abs(err)<TolX, break;<BR>elseif fx*fa > 0, a = xx(k); fa = fx;<BR>else b = xx(k);<BR>end<BR>end<BR>x = xx(k);<BR>if k == MaxIter, fprintf('The best in %d iterations\n',MaxIter), end</P>
回复:(ssdr)回复:(qiuqia17)有关对 inline的 问...
恩嘿嘿 解决啦 <BR><BR>这是有关数值分析的问题哈 ~~想问一下 有什么类似资料来学习的~~~<BR>回复:(qiuqia17)有关对 inline的 问题
《在数值方法中使用MATLAB中》你可以看看请教有关对 inline的 问题
楼主说问题搞定了,究竟是怎样实现的啊?谢谢了,麻烦贴出来参考一下回复 #11 lzlid 的帖子
help strcat and num2str回复 板凳 qiuqia17 的帖子
个人认为直接修改函数是不得以的手段, 基本上尽量避免!直接使用下式好像即可
a=1; eval(['fx=inline(''x+',num2str(a),''',''x'');']) 对于7.0以后的MATLAB,尽量不要用inline了,inline是一个逐步要淘汰的东西了。匿名函数完全可以替换inline的功能,而且还更强大:
fx = @(a)@(x) x+a;
a = 1;
fxa = fx(a)
页:
[1]