首页 > 解决方案 > 以八度计算逆

问题描述

我是八度的新手。我被要求编写一个函数 [k,y,info]=ivs(a,b,fun,N) 计算给定单变量函数的逆的近似值:fun:[a,b] -->R ; 在区间 [fun(a),fun(b)](或 [fun(b),fun(a)])上的 N 个等距点。y 是结果 k - 反函数的近似值的向量(在等距点上评估) y - 等距点的向量 info - 如果计算以成功结束,则为 0,否则为 0

我写了一些代码,它不起作用,我收到很多错误,但我无法从中找出问题所在。我预计这段代码会有很多错误。我希望有人指出什么是错的。

function [k,y,info]=ivs(a,b,fun,N)
  if(a-b==0)
  error('computation cannot take place, a=b');
  else
    if(fun(a)=fun(b))
      error('we have a problem, interval is zero length')
    end
    if(fun(a)<fun(b))
    x=linspace(fun(a), fun(b), N);
      for l in 1:N
      [j,FS,info,out]=fzero(@(j) fun(j)-x(l),[f(a),f(b)]);
      y(i)=j;
        if(info!=1)
        error("Something went wrong with fzero()");
        end
      end
    else
    x=linspace(fun(b), fun(a), N);
      for l in 1:N
      [j,FS,info,out]=fzero(@(j) fun(j)-x(l),[f(a),f(b)]);
      y(l)=j;
        if(info!=1)
        warning("Something went wrong with fzero()");
        end
      end
    end  
  end
end

标签: octave

解决方案


打字有几个错误,逻辑上也有

您正在声明k输出但从未创建它。
fun(a)=fun(b)是作业而不是测试。
for l in 1:N不是 a 的正确方法for
您使用l的是循环而不是使用i索引y
在调用fzero区间寻找解决方案不是[f(a),f(b)]

修正这些问题,我猜你的功能应该是:

function [k,y,info]=ltrigp(a,b,fun,N)
  if(a-b==0)
  error('computation cannot take place, a=b');
  else
    if(fun(a)==fun(b))
      error('we have a problem, interval is zero length')
    end
    if(fun(a)<fun(b))
    x=linspace(fun(a), fun(b), N);
      for l =  1:N
      [j,FS,info,out]=fzero(@(j) fun(j)-x(l),[a,b]);
      y(l)=j;
      k(l)=x(l);
        if(info!=1)
        error("Something went wrong with fzero()");
        end
      end
    else
    x=linspace(fun(b), fun(a), N);
      for l = 1:N
      [j,FS,info,out]=fzero(@(j) fun(j)-x(l),[a,b]);
      y(l)=j;
      k(l)=x(l);
        if(info!=1)
        warning("Something went wrong with fzero()");
        end
      end
    end  
  end
end

并像这样工作:

a=1;
b=4;
N=10;

[k,y,info]=ltrigp(a,b,@exp,N)
k =

 Columns 1 through 8:

    2.7183    8.4827   14.2471   20.0116   25.7760   31.5404   37.3049   43.0693

 Columns 9 and 10:

   48.8337   54.5982

y =

 Columns 1 through 8:

   1.0000   2.1380   2.6566   2.9963   3.2494   3.4513   3.6191   3.7628

 Columns 9 and 10:

   3.8884   4.0000

info =  1

推荐阅读