Z2000
2023 年12 月 13 日 06:00
1
这个是完整的代码,是为了实现龙伯透镜的射线追踪分析
tspan=[0 1.6];
no_lines=10;
a=1;
y0=range(-a,a,no_lines);
x0=sqrt.(1 .-y0.^2);
x1=ones(1,length(x0))*2*a;hold();
x1=ones(1,length(x0))*2*a;
y1=y0;
line([x0';x1],[y0';y1'],color= :green); hold();
phi=range(0,2*pi,100);
x=a*cos.(phi);
y=a*sin.(phi);
plot(x',y',color= :red,lw=3);
for lp=1:length(x0)
Y0=[x0(lp) y0(lp) -1 0];
options=odeset("RelTol",1e-5,"AbsTol",[1e-6]);
T,Y,=ode45(ham,tspan,Y0,options);
plot(Y[:,1],Y[:,2],color= :blue);hold();
end
ERROR: MethodError: objects of type Vector{Float64} are not callable
Use square brackets [] for indexing an Array.
Stacktrace:
[1] top-level scope
@ .\REPL[82]:2
这是其中调用用到的ham函数
function dy=ham(t,y)
dy=zeros(4,1);
dy(1)=y(3);
dy(2)=y(4);
dy(3)=-y(1);
dy(4)=-y(2);
就是不知道这个错误应该如何改才能正确
xgdgsc
2023 年12 月 13 日 06:06
2
Use square brackets [] for indexing an Array.
Z2000
2023 年12 月 13 日 06:23
5
加了还是不对
julia> for lp=1:length(x0)
Y0=[[x0(lp)] [y0(lp)] -1 0];
options=odeset("RelTol",1e-5,"AbsTol",[1e-6]);
T,Y,=ode45(ham,tspan,Y0,options);
plot(Y[:,1],Y[:,2],color= :blue);hold();
end
ERROR: MethodError: objects of type Vector{Float64} are not callable
Use square brackets [] for indexing an Array.
Stacktrace:
[1] top-level scope
@ .\REPL[82]:2
Z2000
2023 年12 月 13 日 06:30
7
谢谢谢谢,这个问题解决了,但是又出现了一个新问题,希望您可以再帮我看看
julia> for lp=1:length(x0)
Y0=[x0[lp] y0[lp] -1 0];
options=odeset("RelTol",1e-5,"AbsTol",[1e-6]);
T,Y,=ode45(ham,tspan,Y0,options);
plot(Y[:,1],Y[:,2],color= :blue);hold();
end
ERROR: MethodError: no method matching odeset(::String, ::Float64, ::String, ::Vector{Float64})
Stacktrace:
[1] top-level scope
@ .\REPL[83]:3
Z2000
2023 年12 月 13 日 06:32
8
这个程序原本是在matlab上实现的,现在需要用mworks复现,而mworks使用的是julia,所以就一堆问题
Z2000
2023 年12 月 13 日 06:36
9
抱歉,我之前没查阅手册,现在我查阅手册后知道了julia中这个函数的正确用法,这个问题已经没有了,谢谢您
xgdgsc
2023 年12 月 13 日 06:59
10
以后可以先试试把你的代码用 ``` code ``` 包起来后面加 find out how to fix the error at which line 先问 Ask AI · JuliaHub 我试了这个括号问题它可以修复