考虑以下matlab代码片段:
g = @(x, t)x.*0;
u_explizit = explizit_Euler(20, 800, 1, 1, zeros(21,1), g, [1;2], 0, 0.1);
figure
surf(u_explizit);
shading flat;
title('Aufgabe 2 - Explizit Euler');
u_implizit = implizit_Euler(20, 800, 1, 1, zeros(21,1), g, [1;2], 0, 0.1);
两个函数explizit_Euler
和implizit_Euler
都以相同的命令开头(此处显示为explizit_Euler
:
function [u] = explizit_Euler(n, nt, T, kappa, u0, f, b, gN, gD)
tau = T/nt;
[A, z] = prepare_system(n, f, b, gN, gD);
z = z';
...
end
函数prepare_system
如下所示:
function [ A, z] = prepare_system(n, f, b, gN, gD)
%PREPARE_MATRIX_SYSTEM Prepares A_h and solution vector f_h
h = 1/n;
z = f((0:n)./n);
...
end
来自prepare_system
内的explizit_Euler
来电正常。但是,implizit_Euler
内的来电会发出错误消息,我无法弄清楚原因:
Subscript indices must either be real positive integers or logicals.
Error in implizit_Euler (line 5)
z = f((0:n)./n);
似乎matlab认为f
是一个向量,因此它无法访问f(0)
,如果f
是一个向量,这是有意义的。但f
是函数句柄!为什么完全相同的代码在explizit_Euler
内的早期代码中正常工作?
答案 0 :(得分:1)
我错放了implizit_Euler
(!)签名中的参数 - 抱歉,伙计们!