0
考慮下面的MATLAB代碼片段:不知道爲什麼與指數誤差在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
從explizit_Euler
開始prepare_system
的呼叫工作正常。然而,從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
之前的代碼中,完全相同的代碼是如何工作的?
喲確定你不使用f之前作爲一個向量? –
@AnderBiguri是的,我剛剛檢查了我的腳本。另外,我重命名它,它仍然不起作用 – kaufmanu
我發現,當調用implizit_Euler時,函數句柄變成矢量。我無法弄清楚爲什麼。 – kaufmanu