将代码从Matlab传递到Python值错误

问题描述 投票:0回答:1

我试图传递给Python的Matlab代码是。

    e=1.602*10^(-19);
    m_e=9.109*10^(-31);
    c=2.998*10^8;
    lambda_u=0.0314; % in m Undulatorwellenlänge
    N_u=12; %Anzahl Undulatoren
    B_0=0.98; %Peak Magnetfeld
    K=2.84;    %e*B_0*lambda_u/(2*pi*m_e*c); % formale Definition 
    k_u=2*pi/lambda_u; 
    gamma=1614; %gamma Faktor

    beta=0.9; %beta Faktor
    beta_bar=(1-1/(2*gamma^2)*(1+K^2/2)); %gemittelter beta Wert
    w_u=beta_bar*c*k_u;
    gamma_bar=gamma/(sqrt(1+K^2/2)); %gemittelter Gamma wert
    w_star=gamma*c*k_u/(sqrt(1+K^2/2)); %Frequenz im bewegten System

%% Lambda_l in Abhängigkeit des Winkels theta
% 
 %axes('NextPlot', 'add') 
theta=linspace(0,0.00785398,1000);
for gamma=500:500:2500

lambda_1_mod=lambda_u./(2*gamma.^2)*(1+K.^2/2+gamma.^2*theta.^2);
hold on
figure(7)
plot(theta, lambda_1_mod)
hold off
%xlim([-1 1])
%ylim([-1 1])
xlabel('$\theta \,\mathrm{in}\,\mathrm{rad}$','Interpreter','latex')
ylabel('$\lambda_l \,\mathrm{in}\,\mathrm{m}$','Interpreter','latex')
title('$\lambda_l\, \mathrm{in\, Abhaengigkeit\, des\, Winkels}\, \theta$','interpreter','Latex')
end
legend('$\gamma=500$','$\gamma=1000$','$\gamma=1500$','$\gamma=2000$','$\gamma=2500$','Interpreter','latex','Location','Best')

我是用Python写的

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize
import math

#FLASH 2 Parameter
e=1.602*(10**-19)
m_e=9.109*(10**-31)
c=2.998*10**8
lambda_u=0.0314 
N_u=12 #Anzahl Undulatoren
B_0=0.98 #Peak Magnetfeld
K=2.8    #e*B_0*lambda_u/(2*pi*m_e*c);
k_u=2*math.pi/lambda_u 
gamma=1614

beta=0.9 #beta Faktor
beta_bar=(1-1/(2*gamma^2)*(1+K**2/2)) #gemittelter beta Wert
w_u=beta_bar*c*k_u
gamma_bar=gamma/(math.sqrt(1+K**2/2)) #gemittelter Gamma wert
w_star=gamma*c*k_u/(math.sqrt(1+K**2/2)) #Frequenz im bewegten System


# Lambda_l in Abhängigkeit des Winkels theta

fig = plt.figure()
def labda_1_mod(theta, gamma):
  return lambda_u/(2*gamma**2)*(1+K**2/2+gamma**2*theta**2)
theta = np.array([0,0.00785398,1000])
for gamma in range(500,2500,500):
  plt.plot(theta,gamma)
plt.xlabel('theta')
plt.ylabel('labda_1_mod')
plt.title('Test')
plt.grid(True)
plt.savefig("test.png") 
plt.show()               

现在我收到错误信息:x和y必须有相同的第一维度,但有形状(3,)和(1,)我理解错误信息,但由于我对Python非常陌生,我不知道如何修正我的语法。

python arrays matlab valueerror
1个回答
0
投票

你好像忘了调用 labda_1_mod() 函数。你应该把这行改成

for gamma in range(500, 2500, 500):
    plt.plot(theta, gamma)

改成这样

for gamma in range(500, 2500, 500):
    plt.plot(theta, labda_1_mod(theta, gamma))

输出如下。enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.