在MATLAB中同時繪制?sin?(x), csc(x)?和?ln?∣tan?(x/2)∣的函數圖像,需要處理函數的奇點(如?csc?(x) 在?sin?(x)=0 時無定義,ln?∣tan?(x/2)∣ 在?x=kπ 時無定義)(deepseek生成matlab代碼)
% 定義x范圍(-2π到2π),高密度采樣
x = linspace(-2*pi, 2*pi, 10000);% 精確識別csc(x)的奇點(sin(x)=0的點)
csc_singular_indices = find(abs(sin(x)) < 1e-3); % 檢測所有sin(x)接近0的位置% 創建奇點緩沖區(移除奇點附近±0.05弧度的點)
buffer_zone = 0.05; % 緩沖區大小
for k = csc_singular_indicesstart_idx = max(1, k - floor(buffer_zone/(4*pi/10000)));end_idx = min(length(x), k + floor(buffer_zone/(4*pi/10000)));x(start_idx:end_idx) = NaN;
end% 計算函數值(使用處理后的x)
y_sin = sin(x);
y_csc = 1 ./ y_sin; % csc(x) = 1/sin(x)% 處理ln|tan(x/2)|的奇點
y_tan_half = tan(x/2);
y_log = log(abs(y_tan_half));% 額外移除ln|tan(x/2)|的奇點(tan(x/2)無定義的位置)
log_singular = isnan(y_tan_half) | (abs(y_tan_half) < 1e-10);
x(log_singular) = NaN;
y_log(log_singular) = NaN;% 重新計算所有函數值
y_sin = sin(x);
y_csc = 1 ./ y_sin;
y_log = log(abs(tan(x/2)));% 創建圖形窗口
figure;
hold on;% 繪制三條曲線
plot(x, y_sin, 'b-', 'LineWidth', 1.5); % sin(x): 藍色實線
plot(x, y_csc, 'r--', 'LineWidth', 1.5); % csc(x): 紅色虛線
plot(x, y_log, 'g-.', 'LineWidth', 1.5); % ln|tan(x/2)|: 綠色點劃線% 設置坐標軸范圍和標簽
xlim([-2*pi, 2*pi]);
ylim([-10, 10]); % 限制Y軸范圍
xlabel('x');
ylabel('Function Values');
title('Plot of sin(x), csc(x), and ln|tan(x/2)| with Corrected Singularity Handling');% 添加圖例和網格
legend('sin(x)', 'csc(x)', 'ln|tan(x/2)|', 'Location', 'Best');
grid on;% 標記π倍數的刻度和奇點位置
xticks([-2*pi, -3*pi/2, -pi, -pi/2, 0, pi/2, pi, 3*pi/2, 2*pi]);
xticklabels({'-2\pi', '-3\pi/2', '-\pi', '-\pi/2', '0', ...'\pi/2', '\pi', '3\pi/2', '2\pi'});% 標記所有奇點位置(x = kπ)
singular_x = [-2*pi, -pi, 0, pi, 2*pi];
for k = 1:length(singular_x)line([singular_x(k) singular_x(k)], ylim, 'Color', [0.5 0.5 0.5], 'LineStyle', ':', 'LineWidth', 1);
end% 添加圖例說明
text(-6, 9, 'Vertical asymptotes at x = kπ', 'Color', [0.5 0.5 0.5], 'FontSize', 10);hold off;