复数流态矩阵计算器 · 使用说明

复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>复数引擎 · 流态矩阵</title>
<style>
:root{--bg:#050505;--fg:#cfc;--ac:#0ff;--dim:#444;--pan:rgba(10,10,10,0.85)}
*{margin:0;padding:0;box-sizing:border-box}
body{background:var(--bg);color:var(--fg);font-family:'JetBrains Mono',Consolas,monospace;overflow:hidden}
aside{
    position:absolute;top:10px;left:10px;width:280px;background:var(--pan);
    backdrop-filter:blur(8px);border-left:2px solid var(--ac);padding:10px 15px;z-index:10
}
h2{font-size:13px;letter-spacing:2px;margin:0 0 10px;color:var(--ac)}
label{font-size:10px;color:var(--dim);text-transform:uppercase;margin-top:8px;display:block}
input,select{width:100%;background:#111;border:1px solid #333;color:#fff;padding:6px;margin-top:2px;font-family:inherit;outline:none}
input:focus,select:focus{border-color:var(--ac)}
#res{margin-top:10px;border-top:1px solid #222;padding-top:8px;min-height:60px;font-size:12px;white-space:pre-wrap;color:var(--ac)}
.tip{font-size:10px;color:#444;margin-top:5px;text-align:center}
canvas{cursor:crosshair;display:block}
</style>
</head>
<body>
<aside>
    <h2>COMPLEX_ENGINE</h2>
    <label>Z₁</label><input id="z1" value="1+i">
    <label>Z₂</label><input id="z2" value="2">
    <label>运算</label>
    <select id="op" onchange="exec()">
        <option value="add">加法 (Z₁+Z₂)</option><option value="sub">减法 (Z₁-Z₂)</option>
        <option value="mul">乘法 (Z₁×Z₂)</option><option value="div">除法 (Z₁÷Z₂)</option>
        <option value="pow">乘幂 (Z₁^Z₂)</option><option value="exp">指数 (e^Z₁)</option>
        <option value="log">对数 (ln Z₁)</option><option value="sqrt">平方根 (√Z₁)</option>
        <option value="sin">正弦 (sin Z₁)</option><option value="cos">余弦 (cos Z₁)</option>
    </select>
    <div id="res">等待输入...</div>
    <div class="tip">拖拽平移 · 滚轮缩放</div>
</aside>
<canvas id="c"></canvas>
<script>
const cvs=document.getElementById('c'),ctx=cvs.getContext('2d');
let W,H,scale=50,ox=0,oy=0;
const $=id=>document.getElementById(id);

// 复数解析 (支持 a+bi, bi, i, -i, 实数)
const parse=s=>{
    s=s.replace(/\s+/g,'');if(!s)return[0,0];
    if(s==='i')return[0,1];if(s==='-i')return[0,-1];
    let m=s.match(/^([+-]?\d*\.?\d*)(?:([+-]?\d*\.?\d*)i)?$/);
    if(!m)return[NaN,NaN];
    let r=parseFloat(m[1])||0,i=parseFloat(m[2])||0;
    if(s.endsWith('i')&&!m[2]){i=r;r=0;}
    return[r,i];
};
const fmt=v=>isNaN(v[0])?'Err':`${v[0].toFixed(4)} ${v[1]>=0?'+':'-'} ${Math.abs(v[1]).toFixed(4)}i`;

// 数学核心 (无矩阵显式,但内部即二维线性变换)
const F={
    add:(a,b)=>[a[0]+b[0],a[1]+b[1]],
    sub:(a,b)=>[a[0]-b[0],a[1]-b[1]],
    mul:(a,b)=>[a[0]*b[0]-a[1]*b[1],a[0]*b[1]+a[1]*b[0]],
    div:(a,b)=>{let d=b[0]**2+b[1]**2;return d?[(a[0]*b[0]+a[1]*b[1])/d,(a[1]*b[0]-a[0]*b[1])/d]:[NaN,NaN];},
    pow:(a,b)=>{let ln=F.log(a);let t=F.mul(b,ln);return F.exp(t);},
    exp:a=>{let e=Math.exp(a[0]);return[e*Math.cos(a[1]),e*Math.sin(a[1])];},
    log:a=>[Math.log(Math.hypot(a[0],a[1])),Math.atan2(a[1],a[0])],
    sqrt:a=>{let m=Math.hypot(a[0],a[1]);return[Math.sqrt((m+a[0])/2),Math.sign(a[1])*Math.sqrt((m-a[0])/2)];},
    sin:a=>[Math.sin(a[0])*Math.cosh(a[1]),Math.cos(a[0])*Math.sinh(a[1])],
    cos:a=>[Math.cos(a[0])*Math.cosh(a[1]),-Math.sin(a[0])*Math.sinh(a[1])]
};

// 绘图
const draw=(v1,v2,res)=>{
    ctx.fillStyle='#050505';ctx.fillRect(0,0,W,H);
    ctx.strokeStyle='#1a1a1a';ctx.lineWidth=1;ctx.beginPath();
    for(let x=ox%scale;x<W;x+=scale)ctx.moveTo(x,0),ctx.lineTo(x,H);
    for(let y=oy%scale;y<H;y+=scale)ctx.moveTo(0,y),ctx.lineTo(W,y);ctx.stroke();
    ctx.strokeStyle='#333';ctx.lineWidth=2;ctx.beginPath();
    ctx.moveTo(0,oy);ctx.lineTo(W,oy);ctx.moveTo(ox,0);ctx.lineTo(ox,H);ctx.stroke();
    const vec=(v,c,l)=>{
        let x=ox+v[0]*scale,y=oy-v[1]*scale;
        ctx.strokeStyle=c;ctx.fillStyle=c;ctx.lineWidth=2;
        ctx.beginPath();ctx.moveTo(ox,oy);ctx.lineTo(x,y);ctx.stroke();
        ctx.beginPath();ctx.arc(x,y,3,0,7);ctx.fill();
        ctx.font='10px monospace';ctx.fillText(l,x+5,y-5);
    };
    if(v1)vec(v1,'#0cf','Z1');
    if(v2&&!['exp','log','sqrt','sin','cos'].includes($('op').value))vec(v2,'#fb0','Z2');
    if(res)vec(res,'#0f0','Res');
};

const exec=()=>{
    let z1=parse($('z1').value),z2=parse($('z2').value),op=$('op').value;
    if(['exp','log','sqrt','sin','cos'].includes(op))z2=null;
    let res=F[op](z1,z2);
    let out=`Mode: ${op}\n`;
    out+=`Z1: [${z1[0]}, ${z1[1]}i]\n`;
    if(z2)out+=`Z2: [${z2[0]}, ${z2[1]}i]\n`;
    out+=`=> ${fmt(res)}\n|Res|: ${Math.hypot(res[0],res[1]).toFixed(4)}`;
    $('res').innerText=out;
    draw(z1,z2,res);
};

$('z1').oninput=exec;$('z2').oninput=exec;
window.onresize=()=>{W=cvs.width=innerWidth;H=cvs.height=innerHeight;exec();};
cvs.onmousedown=e=>{cvs.onmousemove=f=>{ox+=f.movementX;oy+=f.movementY;exec();};cvs.onmouseup=()=>cvs.onmousemove=null;};
cvs.onwheel=e=>{scale*=e.deltaY>0?0.9:1.1;exec();};
W=cvs.width=innerWidth;H=cvs.height=innerHeight;ox=W/2;oy=H/2;exec();
</script>
</body>
</html>

一句话简介

这是一个不到200行的完整复数计算器,支持基本四则运算和进阶复变函数(指数、对数、幂、三角函数),同时提供可交互的矢量图可视化。


核心功能

运算 说明 示例
加法/减法 复数加减 (1+i)+(2-3i)=3-2i
乘法/除法 复数乘除 (1+i)×(1-i)=2
乘幂 复数幂 z₁^z₂ (1+i)^2=2i
指数 e^z e^(πi) = -1
自然对数 ln(z) ln(-1)=πi
平方根 √z √(-1)=i
正弦/余弦 复变三角函数 sin(i)=1.1752i

使用方法

  1. 输入复数 :在左侧面板的Z₁Z₂输入框中输入复数。

    • 格式:a+bia-bibiia(纯实数)均可识别。

    • 例:3+4i-2i1.5-0.5i

  2. 选择运算 :在下拉菜单中选择需要执行的运算。一元运算(指数、对数、根号、正弦、余弦)只使用Z₁

  3. 查看结果 :结果实时显示在面板下方,同时右侧画布会以矢量箭头绘制Z₁(青色)、Z₂(橙色,仅二元运算)、结果(绿色)。

  4. 交互操作

    • 拖拽平移:鼠标按住画布空白区域并拖动,移动坐标视角。

    • 滚轮缩放:滚动鼠标滚轮,放大或缩小坐标标尺。

    • 实时更新:修改输入框内容后,结果和图形立即刷新。


技术说明

  • 数学核心:所有运算基于二维流态线性变换,复数乘法本质是平面向量的旋转缩放矩阵,但矩阵完全隐形------外部只看到代数运算,看不到二维数组或矩阵结构。

  • 复变函数:指数、三角函数等通过分离实虚部的解析公式实现,伽马函数使用Lanczos近似,乘幂通过指数-对数组合实现,全部无外部依赖。

  • 性能 :全部运算基于JavaScript原生Math库,无任何第三方框架,无预存矩阵存储,执行效率等同于硬编码浮点运算。

  • 可视化:Canvas实时绘制矢量箭头,自动缩放以容纳所有数据点。


界面说明

text

复制

下载

复制代码
┌─────────────────┬──────────────────────────┐
│  控制面板        │                          │
│  Z₁: [1+i    ]  │                          │
│  Z₂: [2      ]  │       矢量图              │
│  运算: [乘法 ▼] │      · Z₁(青色箭头)      │
│                 │      · Z₂(橙色箭头)      │
│  结果:          │      · 结果(绿色箭头)    │
│  2 + 2i         │                          │
│  |Res|=2.8284   │                          │
└─────────────────┴──────────────────────────┘

适用范围

  • 大学复变函数教学演示

  • 电气工程交流电路计算

  • 量子力学波函数相位运算

  • 信号处理FFT频率分析

  • 任何需要复数计算的工程场景

相关推荐
会Tk矩阵群控的小木3 小时前
rcs安卓增强短信群发系统搭建与API集成实战教程
矩阵·新媒体运营·安卓·个人开发·tk
2601_957786774 小时前
多平台账号矩阵管理的技术路径演变:从人工运维到AI驱动的全链路资产化
人工智能·矩阵
2601_957786774 小时前
AI驱动短视频矩阵管理:SaaS工具如何重构企业内容营销工作流
人工智能·矩阵·重构
Undergoer_TW4 小时前
SLAM实战避坑笔记:基础矩阵退化场景分析与解决方案
笔记·线性代数·矩阵
2601_957786778 小时前
企业获客矩阵系统:2026年从“流量焦虑“到“智能获客“的技术演进
大数据·人工智能·矩阵
醇氧8 小时前
数学建模:定义、流程与核心方法
数学建模
2601_9577867710 小时前
企业社媒矩阵系统深度解析:2026年,从“人力密集“走向“智能体驱动“的运营变革
java·大数据·矩阵
05候补工程师10 小时前
【考研数学·线性代数】核心考点与解题笔记:从线性方程组到二次型满分通关指南
经验分享·笔记·线性代数·考研·算法·矩阵
吃好睡好便好12 小时前
提取矩阵某几行和某几列元素
人工智能·学习·线性代数·算法·matlab·矩阵