24小时热门版块排行榜    

查看: 1367  |  回复: 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的回帖

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的回帖

chaofan1231

银虫 (小有名气)

送鲜花一朵
引用回帖:
4楼: Originally posted by lijie169 at 2012-05-17 12:08:00:
可以吧for 给去掉,只留一句  f=fsolve(@(x) func(x,rg),1000);后面的function再接上就可以了...不需要那么麻烦

function f=do(rg)

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

fun ...

再问一下,这是我循环中的一部分,用这个函数求解时每次循环都要迭代,运算量大,很 慢,有什么更好的办法吗?
5楼2012-05-17 13:45:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

引用回帖:
5楼: Originally posted by chaofan1231 at 2012-05-17 13:45:02:
再问一下,这是我循环中的一部分,用这个函数求解时每次循环都要迭代,运算量大,很 慢,有什么更好的办法吗?

你可以采用我最下面的代码,支持向量运算。一次性算完,采用矩阵的运算方法,听说matlab在矩阵运算里比for循环快N倍...你可以试试。
6楼2012-05-17 16:26:17
已阅   回复此楼   关注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的回帖

chaofan1231

银虫 (小有名气)

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

我想用矩阵运算的,但是我的方程太复杂了,含有指数,不知道怎么化成矩阵运算的形式。
8楼2012-05-18 08:47:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

貌似是用3楼的代码可以,我理解错了,不能使用直接向量求解。使用规则是rg是向量,不是矩阵,若要是矩阵,则需要修改主函数代码
CODE:
function f=do(rg)
      [m,n]=size(rg);
      x0=1000;
      f=zeros(m,n);
      for i=1:m
      for j=1:n
         f(i,j)=fsolve(@(x) func(x,rg(i,j)),x0);
      end
     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
end

9楼2012-05-18 12:00:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijie169

铜虫 (著名写手)

引用回帖:
9楼: Originally posted by lijie169 at 2012-05-18 12:00:13:
貌似是用3楼的代码可以,我理解错了,不能使用直接向量求解。使用规则是rg是向量,不是矩阵,若要是矩阵,则需要修改主函数代码

function f=do(rg)
      =size(rg);
      x0=1000;
      f=zeros(m,n);
...

最后的代码rg可以是矩阵也可以是向量,3楼的rg不能是矩阵
10楼2012-05-18 12:01:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 chaofan1231 的主题更新
信息提示
请填处理意见