指数函数exp

目录

指数函数及e

指数增长

复数指数

练习

1. expgui

2. 计算e

3 五角星绘制


指数函数及e

(1)\dot{y}/y的比值总是常数

(2)e^x的导数为其自身。(根据比值=1推导出e的值)

%% Plot a^t and its approximate derivative
    a = 2;
    t = 0:.01:2;
    h = .00001;
    y = 2.^t;
    ydot = (2.^(t+h) - 2.^t)/h;
    plot(t,[y; ydot])
    legend('y','dy/dx')

%% Compute e
    format long
    format compact
    h = 1;
    while h > 2*eps
        h = h/2;
        e = (1 + h)^(1/h);
        disp([h e])
    end

对指数函数进行二项式展开,求和式的每一项都通过前一项简单计算得出。该循环在r==s时结束,即两个相连的部分浮点数相同时结束。

%% Experimental version of exp(t)
    t = rand
    s = 1;
    term = 1;
    n = 0;
    r = 0;
    while r ~= s
       r = s;
       n = n + 1;
       term = (t/n)*term;%求和式的每一项都通过前一项简单计算得出
       s = s + term;
    end
    exp_of_t = s

指数增长


年利、月利、连续利息

%% Compound interest
    fprintf('             t        yearly       monthly     continuous\n')
    format bank
    r = 0.05;
    y0 = 1000;
    for t = 0:20
       y1 = (1+r)^t*y0;
       y2 = (1+r/12)^(12*t)*y0;
       y3 = exp(r*t)*y0;
       disp([t y1 y2 y3])
    end

贷款清还

%% Payments for a car loan
    y0 = 20000
    r = .10
    h = 1/12
    n = 36
    p = (1+r*h)^n/((1+r*h)^n-1)*r*h*y0

复数指数


绘制八边形

%% Complex exponential
    theta = (1:2:17)'*pi/8
    z = exp(i*theta)
    p = plot(z);
    set(p,'linewidth',4,'color','red')
    axis square off

练习


1. expgui


2. 计算e

%% 计算e
%在h很小时,10的负多少次方不能由浮点数很好表示,将会发生偏差
clear
format long
format compact
h=1
while h>1.e-15
    h=h/10; e=(1+h)^(1/h); disp([h e])
end

%% 计算e
clear
format long
format compact
h=1
while h>1.e-15
    h=h/10; e=(1+h)^(1/(1+h-1)); disp([h e])
end

3 五角星绘制

%% 利用复数指数绘制五角星
    theta = (0:3:15)'*(2*pi/5)
    z = exp(i*theta)
    p = plot(z);
    set(p,'linewidth',4,'color','red')
    axis square off

在C语言中,由于直接支持复数运算的数据结构有限,我们需要自定义数据结构来存储复数,并利用一些数学库或自定义算法来实现所需的复数函数。这里是一个简化的示例,展示了如何使用结构体和指针来表示复数,并提供这些基本复数函数的计算方法: 首先,创建一个复数结构体: ```c #include <stdio.h> #include <math.h> typedef struct { double real; double imag; } complex; ``` 接下来,定义必要的复数运算函数(例如加减乘除): ```c complex add(complex a, complex b) { complex result = {a.real + b.real, a.imag + b.imag}; return result; } // 其他类似,如 subtract、multiply等 ``` 然后,我们可以用泰勒级数或特定算法实现指数、对数、正弦和余弦: ```c complex exp(complex z) { const double PI = M_PI; // 获取π值 complex term = {1, 0}, result = {1, 0}; double scale = 1, arg = z.real + I * z.imag; for (int n = 1; ; n++) { term.real *= arg / n; if (n % 2 == 0) term.imag -= term.real * arg / (2 * n); else term.imag += term.real * arg / (2 * n - 1); scale *= arg / n; if (scale < 1e-15) break; result = add(result, term); } return result; } // 对数函数 ln 使用自然对数 e 和泰勒级数近似 double log_abs(complex z) { double abs_z = sqrt(z.real * z.real + z.imag * z.imag); if (abs_z > 0) { return log(abs_z) + ((z.imag < 0) ? M_PI : 0); } else { return -INFINITY; } } complex ln(complex z) { complex ln_r = {log_abs(z), (z.imag < 0) ? M_PI : 0}; return ln_r; } // 正弦和余弦可以使用内置的 sin() 和 cos() 函数,因为它们可以处理复数输入 complex sin(complex z) { return {sin(z.real) * cos(z.imag), sin(z.imag) * cos(z.real)}; } complex cos(complex z) { return {cos(z.real) * cos(z.imag), -sin(z.imag) * sin(z.real)}; } ``` 以上代码只是一个基础示例,实际应用中可能会需要更精确的数值稳定性和算法优化。同时,C标准库中并没有直接用于处理复数的函数,所以这里的实现依赖于用户手动扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值