声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2998|回复: 13

[综合讨论] [求助]有关对 inline的 问题

[复制链接]
发表于 2006-5-30 11:40 | 显示全部楼层 |阅读模式

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

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

x
如果有这样的式子<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编辑过]

回复
分享到:

使用道具 举报

发表于 2006-5-30 16:32 | 显示全部楼层

回复:(qiuqia17)有关对 inline的 问题

什么意思?没懂,能否说的详细点
 楼主| 发表于 2006-5-30 16:40 | 显示全部楼层

回复:(qiuqia17)有关对 inline的 问题

简单的说 <BR>   例如 有  fx=inline('x+1','x');<BR> 然后进行二分法  [x,err,xx] = bisct(fx,-2,2,1e-4,50); <BR>这样可以 算出 x+1=0的值<BR><BR>    但是 对 a=1;<BR>                  fx=inline('x+a','x');<BR>      然后  [x,err,xx] = bisct(fx,-2,2,1e-4,50); <BR>这个时候 会报错 说 a 没有定义~~<BR><BR> 应该怎么办?<BR>  我想是不是 inline要直接进行值引用的 ..有没有办法 通过a 来进行计算的 <BR><BR>suffer ~~ 看这个 我解释清楚了吗<BR>
发表于 2006-5-30 16:44 | 显示全部楼层

回复:(qiuqia17)有关对 inline的 问题

<P>应该是bisect吧</P>
 楼主| 发表于 2006-5-30 16:48 | 显示全部楼层

回复:(qiuqia17)回复:(qiuqia17)有关对 inline的...

bisect 或者 bisct 这个 没有关系 <BR>   就是 inline 中 怎么把 这个a 加进去 然后 进行 下面的二分计算~~
发表于 2006-5-30 16:51 | 显示全部楼层

回复:(qiuqia17)有关对 inline的 问题

这个好像不能直接实现,需要修改你的bisct,增加一个传递变量来传递a
 楼主| 发表于 2006-5-30 17:12 | 显示全部楼层

回复:(qiuqia17)有关对 inline的 问题

<P>头痛~~  指点指点<BR><BR>function [x,err,xx] = 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 &gt; 0, error('We must have f(a)f(b)&lt;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) &lt; TolFun | abs(err)&lt;TolX, break;<BR>elseif fx*fa &gt; 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>
发表于 2006-5-30 17:23 | 显示全部楼层

回复:(qiuqia17)有关对 inline的 问题

<P>看一下这样对不对<BR>a=1;<BR>fx=inline('x+aa');<BR>[x,err,xx] = bisct(fx,-2,2,1e-4,50,a);</P>
<P><BR>function [x,err,xx] = 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 &gt; 0, error('We must have f(a)f(b)&lt;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) &lt; TolFun | abs(err)&lt;TolX, break;<BR>elseif fx*fa &gt; 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>

评分

1

查看全部评分

 楼主| 发表于 2006-5-30 18:31 | 显示全部楼层

回复:(ssdr)回复:(qiuqia17)有关对 inline的 问...

恩  嘿嘿 解决啦 <BR><BR>这是有关数值分析的问题哈 ~~  想问一下 有什么类似资料来学习的~~~<BR>
发表于 2006-5-30 20:39 | 显示全部楼层

回复:(qiuqia17)有关对 inline的 问题

《在数值方法中使用MATLAB中》你可以看看
发表于 2007-10-30 15:11 | 显示全部楼层

请教有关对 inline的 问题

楼主说问题搞定了,究竟是怎样实现的啊?谢谢了,麻烦贴出来参考一下
发表于 2007-10-30 17:43 | 显示全部楼层

回复 #11 lzlid 的帖子

help strcat and num2str
发表于 2010-7-9 11:25 | 显示全部楼层

回复 板凳 qiuqia17 的帖子

个人认为直接修改函数是不得以的手段, 基本上尽量避免!
直接使用下式好像即可
a=1; eval(['fx=inline(''x+',num2str(a),''',''x'');'])

评分

1

查看全部评分

发表于 2010-7-9 16:23 | 显示全部楼层
对于7.0以后的MATLAB,尽量不要用inline了,inline是一个逐步要淘汰的东西了。匿名函数完全可以替换inline的功能,而且还更强大:

  1. fx = @(a)@(x) x+a;
  2. a = 1;
  3. fxa = fx(a)
复制代码

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-3 03:47 , Processed in 0.087004 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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