Octave 八度音程中求逆

Octave 八度音程中求逆,octave,Octave,我不熟悉八度音阶。我被要求写一个函数[k,y,info]=ivs(a,b,fun,N),它计算给定单变量函数的逆的近似值:fun:[a,b]->R;在间隔[fun(a),fun(b)](或[fun(b),fun(a)])上的N个等距点上。 y是结果 k-逆函数近似值的向量(在等距点上计算) 等距点的y矢量 信息-如果计算成功结束,则为0,否则为0 我写了一些代码,它不起作用,我得到了很多错误,但我不能从中找出什么是错误的。我预计这段代码中会有很多错误。我想有人指出哪里出了问题 function

我不熟悉八度音阶。我被要求写一个函数[k,y,info]=ivs(a,b,fun,N),它计算给定单变量函数的逆的近似值:fun:[a,b]->R;在间隔[fun(a),fun(b)](或[fun(b),fun(a)])上的N个等距点上。 y是结果 k-逆函数近似值的向量(在等距点上计算) 等距点的y矢量 信息-如果计算成功结束,则为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
函数[k,y,info]=ivs(a,b,fun,N)
如果(a-b==0)
错误('无法进行计算,a=b');
其他的
如果(乐趣(a)=乐趣(b))
错误('我们遇到问题,间隔为零长度')
结束

如果(fun(a)在输入中有几个错误,但在逻辑上也有一些错误

您正在声明一个
k
输出,但从未创建它。
fun(a)=fun(b)
是一项作业而不是测试。
用于1:N中的l
不是
用于
的正确方法
您对循环使用
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