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 我写了一些代码,它不起作用,我得到了很多错误,但我不能从中找出什么是错误的。我预计这段代码中会有很多错误。我想有人指出哪里出了问题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
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