我试图绘制图表,但矩阵尺寸在matlab中并不一致

时间:2017-10-19 08:36:10

标签: matlab loops plot

所以我试图绘制图表,这是我目前的代码

T=10; %set the values given to us
t(1)=0;
delta=0.01;
mu=0.05;
sigma=linspace(0,1,10001); %set the spacing for sigma
v=zeros(length(sigma),T); %set the xeros
k=1;
for sigma=linspace(0.01,1,1000)
t(k)=k*delta; 
eta=randn(1); %define eta
S(2)=1+mu*delta+sigma*sqrt(delta)*eta; %set S
S(T+1)=S(10)+mu*delta*S(10)+sigma*sqrt(delta)*eta*S(10);
end
t(10000)=1; %set the rounding error
plot (S,sigma) %plot the graph
xlabel 'S' %label the axis
ylabel 'sigma'

我尝试过使用过。为了满足内部矩阵维度(对于S),但这并没有奏效。我现在已经绕圈了一段时间了,无法解决这个问题。

1 个答案:

答案 0 :(得分:0)

我已经尝试过你的代码并分析了这个问题,我对它有一些疑问。知道你想要解决什么问题会很有帮助。但是,关注我们所拥有的东西,我所看到的一件事就是迭代。这对我来说没有意义,你已经使用了 for 迭代结构和sigma条件。没关系,让我们一步一步看看发生了什么:

for sigma=linspace(0.01,1,1000)
    t(k)=k*delta;
    eta=randn(1); %define eta
    S(2)=1+mu*delta+sigma*sqrt(delta)*eta; %set S
    S(T+1)=S(10)+mu*delta*S(10)+sigma*sqrt(delta)*eta*S(10);
end

首先,您可以定义迭代的 t(k) ,因为值不会随之改变。接下来,你写了 S(2) S(T + 1) ,在这里,你'重新做一次迭代,这是正确的,但是你每次循环都会反复覆盖这些值,所以你要覆盖矩阵 S 的某些值。关于 S ,预先设定内存中的预期尺寸可能会有所帮助,您可以使用:

S=zeros(i,j); % Being i and j, the matrix dimensions.

或者简单地说,像某些人一样,声明变量(在Matlab中不是必需的):

S=[];

这取决于您正在解决的问题。我真的想帮助你,但我需要更多地了解这个问题。我不知道你的工作方法或你如何面对你的问题,但我一直在做的是首先在一张纸上解决它,或者如果它是某种类型的数值问题你无法解决它,那么只是草图你有的想法,并检查矩阵运算中的一致性(与矩阵大小有关),以及那些事情......

希望我一直很有帮助,祝你有个美好的一天:)