24小时热门版块排行榜    

查看: 1375  |  回复: 14
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

chaofan1231

银虫 (小有名气)

[求助] 急急急!符号函数解代数方程遇到的问题

各位高手帮忙看下这是怎么一回事呀!
rg=2;
>> T2=subs(fsolve('rg-exp((1/0.0000005461-1/0.000000700)*0.014388/x+log((x-993.74731)/2869.03078)-5*log(700/546.1))',1000))
??? Error using ==> inlineeval at 15
Error in inline expression ==> rg-exp((1/0.0000005461-1/0.000000700)*0.014388/x+log((x-993.74731)/2869.03078)-5*log(700/546.1))
Undefined function or variable 'rg'.
Error in ==> inline.feval at 36
        INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);
注:直接将rg=2代入方程式可以解的,但是我需要的是在循环中不断给rg赋值,然后再代入公式计算T2,不知道该如何做到。有其它能解上边代数方程的函数也可以用。谢谢啊!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chaofan1231

银虫 (小有名气)

引用回帖:
6楼: Originally posted by lijie169 at 2012-05-17 16:26:17:
你可以采用我最下面的代码,支持向量运算。一次性算完,采用矩阵的运算方法,听说matlab在矩阵运算里比for循环快N倍...你可以试试。

不能算啊!Tsolve函数是我创建的M文件。跟你说的Func是一样的。只能算出来一个值。
rg =

    2.2000    2.0000    1.0000    1.2000    1.1000    1.5000    0.8000
    1.3000    1.5000    2.5000    2.6000    0.9000    1.1000    2.2000
    1.1000    1.3000    2.2000    0.9000    2.2000    2.2000    2.2000

>> t=fsolve(@(x)Tsolve(x,rg),1000)
Warning: Trust-region-dogleg algorithm of FSOLVE cannot handle non-square systems; using Levenberg-Marquardt algorithm instead.
> In fsolve at 324

No solution found.

fsolve stopped because the last step was ineffective. However, the vector of function
values is not near zero, as measured by the default value of the function tolerance.


t =

  1.0628e+003
7楼2012-05-18 08:44:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 15 个回答

lijie169

铜虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
可以这样
CODE:
function f=do(rg)
      n=length(rg);
      x0=1000;
      f=zeros(n,1);
      for i=1:n
         f(i)=fsolve(@(x) fun(x,rg(i)),x0);
      end

function f=func(x,rg)
      f=rg-exp((1/0.0000005461-1/0.000000700)*0.014388/x+log((x-993.74731)/2869.03078)-5*log(700/546.1));
end

使用方法,将你要使用rg的值作为一个向量带入 ,运行do(rg),就ok
2楼2012-05-17 12:01:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

【答案】应助回帖

引用回帖:
2楼: Originally posted by lijie169 at 2012-05-17 12:01:53:
可以这样

function f=do(rg)
      n=length(rg);
      x0=1000;
      f=zeros(n,1);
      for i=1:n
         f(i)=fsolve(@(x) fun(x,rg(i)),x0);
      end

function f=func(x,rg)
      f=rg ...

CODE:
function f=do(rg)
      n=length(rg);
      x0=1000;
      f=zeros(n,1);
      for i=1:n
         f(i)=fsolve(@(x) func(x,rg(i)),x0);
      end

function f=func(x,rg)
      f=rg-exp((1/0.0000005461-1/0.000000700)*0.014388/x+log((x-993.74731)/2869.03078)-5*log(700/546.1));
end

有点小错误....fun应该是func
3楼2012-05-17 12:03:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★
chaofan1231: 金币+5, ★★★★★最佳答案, 谢谢 2012-05-17 13:43:29
xzhdty: 金币+2, 谢谢参与 2012-05-19 16:43:29
可以吧for 给去掉,只留一句  f=fsolve(@(x) func(x,rg),1000);后面的function再接上就可以了...不需要那么麻烦
CODE:
function f=do(rg)

         x0=1000;
         f(i)=fsolve(@(x) func(x,rg),x0);

function f=func(x,rg)
      f=rg-exp((1/0.0000005461-1/0.000000700)*0.014388/x+log((x-993.74731)/2869.03078)-5*log(700/546.1));
end

简洁就是美

» 本帖已获得的红花(最新10朵)

4楼2012-05-17 12:08:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见