clc;
close all;
%% parameter
R0=0.8; a0=2923; a1=-628; a2=402.1; Cth=1.324e-13; Tth=5.953e-6; Tamb=298;
CC=100;
Vm=0.30032043; T=701.5886849;
%求雅可比矩阵
%% Jacobian
for i=1:length(CC)
C=CC(i,1);
A11=(-1./C.*10e9)*(1-Vm.*(a1./(2.*T.*Vm.^0.5)+a2./T))./(R0.*exp((a0+a1.*Vm.^0.5+a2.*Vm)./T));
A12=(-1./C.*10e9).*(Vm.*(a0+a1.*Vm.^0.5+a2.*Vm))./(T.^2.*(R0.*exp((a0+a1.*Vm.^0.5+a2.*Vm)./T)));
B11=(2.*Vm-Vm.^2.*(a1./(2.*T.*Vm.^0.5)+a2./T))./(Cth.*(R0.*exp((a0+a1.*Vm.^0.5+a2.*Vm)./T)));
B12=((Vm.^2.*(a0+a1.*Vm.^0.5+a2.*Vm))./(T.^2.*R0.*exp((a0+a1.*Vm.^0.5+a2.*Vm)./T))-Tth)./Cth;
A=[A11 A12;
B11 B12];
[V,D]=eig(A);%求矩阵的特征值特征向量
X=diag(D);
xx(i)=X(1,:);
yy(i)=X(2,:);
XX=xx';
YY=yy';
Re1=real(XX);
Im1=imag(XX);
Re2=real(YY);
Im2=imag(YY);
end
根据你提供的代码,我看到 xx 和 yy 是在循环内部定义的数组,而 XX 和 YY 是在循环结束后定义的数组,且是通过将 xx 和 yy 转置得到的。因此,在你的代码中,只能得到最后一次循环的结果。如果你想要得到所有循环的结果,需要将 XX 和 YY 改为矩阵形式的变量,并在循环中不断将每次的结果添加到这些矩阵中。
以下是我帮你修改后的代码示例,可以试试:
clc;
close all;
%% parameter
R0=0.8; a0=2923; a1=-628; a2=402.1; Cth=1.324e-13; Tth=5.953e-6; Tamb=298;
CC=100;
Vm=0.30032043; T=701.5886849;
%% Jacobian
num_loop = length(CC);
A_matrix = zeros(num_loop, 2, 2); % 定义矩阵形式的变量来存储 A 矩阵
eig_values = zeros(num_loop, 2);
for i = 1:num_loop
C = CC(i,1);
A11 = (-1./C.*10e9)*(1-Vm.*(a1./(2.*T.*Vm.^0.5)+a2./T))./(R0.*exp((a0+a1.*Vm.^0.5+a2.*Vm)./T));
A12 = (-1./C.*10e9).*(Vm.*(a0+a1.*Vm.^0.5+a2.*Vm))./(T.^2.*(R0.*exp((a0+a1.*Vm.^0.5+a2.*Vm)./T)));
B11 = (2.*Vm-Vm.^2.*(a1./(2.*T.*Vm.^0.5)+a2./T))./(Cth.*(R0.*exp((a0+a1.*Vm.^0.5+a2.*Vm)./T)));
B12 = ((Vm.^2.*(a0+a1.*Vm.^0.5+a2.*Vm))./(T.^2.*R0.*exp((a0+a1.*Vm.^0.5+a2.*Vm)./T))-Tth)./Cth;
A = [A11 A12; B11 B12];
A_matrix(i,:,:) = A; % 将每次计算得到的 A 存储到矩阵中
[V, D] = eig(A);
eig_values(i,:) = diag(D);
end
Re1 = real(eig_values(:,1));
Im1 = imag(eig_values(:,1));
Re2 = real(eig_values(:,2));
Im2 = imag(eig_values(:,2));
% 绘制结果的代码
figure;
subplot(2,2,1); scatter(Re1, Im1, 10, 'filled'); xlabel('Real'); ylabel('Imaginary'); title('Eigenvalue 1');
subplot(2,2,2); scatter(Re2, Im2, 10, 'filled'); xlabel('Real'); ylabel('Imaginary'); title('Eigenvalue 2');
subplot(2,2,3); scatter(Re1, Re2, 10, 'filled'); xlabel('Eigenvalue
感谢回答!还有一点问题,关于for循环这个问题已成功解决!
这个程序我的想法是CC变化求解雅可比矩阵特征值,λ1、λ2,然后再得到它们对应的虚部、实部数据,最后绘制出横坐标为特征值实部,纵坐标为特征值虚部得,随着CC得值变化得曲线,类似下图。
但是特征值得应用部分好像不正确,可以麻烦你帮我改改吗
见正文回复
追问你好,非常感谢前面的回答!再问一下,我更换了方程组和参数,现在的问题是[V,D]=eig(A)这个矩阵不是方阵,但是不知道怎么改,A很显然就是方阵呀,
matlab中for循环只有一个结果是什么情况,下面是我的程序,可以帮忙看一...
Im1 = imag(eig_values(:,1));Re2 = real(eig_values(:,2));Im2 = imag(eig_values(:,2));绘制结果的代码 figure;subplot(2,2,1); scatter(Re1, Im1, 10, 'filled'); xlabel('Real'); ylabel('Imaginary'); title('Eigenvalue 1');subplot(2,2,2); scatter(Re2, Im2, ...
matlab是循环数据但是答案只有一个?
matlab,for循环结果只有一个n0=(4*beta*ap^2\/m\/V)^0.5; 这个语句更新n0变量,并没有对上一次生成的n0进行保存。所以建议程序做一点小小的改动。在for循环之前,初始化一个变量N=[];同时for循环中增加一条语句:
matlab,for循环结果只有一个
matlab,for循环结果只有一个 n0=(4*beta*ap^2\/m\/V)^0.5; 这个语句更新n0变量,并没有对上一次生成的n0进行保存。所以建议程序做一点小小的改动。在for循环之前,初始化一个变量N=[];同时for循环中增加一条语句:
matlab 为啥这个程序画图只显示最后一个
是因为你只画了最后一个 循环结束后,i=40,改一下:clear all;clc;x=[18;20;18;17;17;12;16;16;17;12;15;13;15;14;15;12;14;13;15;17;16;16;15;15;12;13;18;17;13;17;12;16;17;20;16;15;17;20;22;13]y=[16;18;18;15;14;10;16;18;20;15;16;13;17;14;18;13...
matlab for循环为什么只执行1次
其实你的程序已经满足你的要求了,事实上,运行后workspace空间上反映的是最后一个x3,也就是x3循环到最后一个数值(100)后的x3值,当然他就是100了,如果你想要得到的是中间运算中的所有值,而非最终结果,那么请看下面的程序:a1 = 8.001;z3 = 10;k=0;x3 = -100:100 ;for x31=x3(1):...
matlab中for循环为什么只运行了一次
把第二行的k=size(h0);换成k=length(h0);因为size返回数组[1,120],在后面的for里变成了for i=1:1.
用MATLAB编写布林通道,进行循环计算,计算输出结果怎么只有一个数值
n = 55jpm = 10*rand(1,n);M = 19for i = M:length(jpm)avg(1,i) = mean(jpm(1,1+i-M:i),2);stdb(1,i) = std(jpm(1,1+i-M:i),0,2);endBOLL = avg;UB = BOLL+2*stdb;LB = BOLL-2*stdb;tt = M:length(jpm);figureplot(tt,[jpm(tt);BOLL(tt);UB(tt);...
matlab: 为什么我的程序中for循环只执行了一次? 谢谢
work_3(nmat); %多行两列的矩阵 A_1 = A(:,1);A_2 = A(:,2);s1 = numel(unique(A_2)); % length(unique(A_2));count = hist(A_2,unique(A_2));p = 1; k = 1; q = count(1);D = work_5(A_1,p,q);for j = 1:(s1-1)if (length(D) >= 3)output =...
matlab中for循环
用两个变量呗,例如下面的x,用x0保存不变的那个值。x0=100; % 假设的一个值 for i=1:10 x=x0; % 每次循环x都恢复成x0 disp(x)x=x+i; % 改变x的值 disp(x)end
matlab for循环。分析该for循环执行情况,并写出程序运行结果
H = zeros(4,4);for m = 1:4 for n =1:4 H(m,n) = m^2+n^2;end end H 输出结果:H = 2 5 10 17 5 8 13 20 10 13 18 25 17 20 25 32