From aa6d2e654beaee2cc38ca4624c668a01b86b9fad Mon Sep 17 00:00:00 2001 From: gyz Date: Thu, 27 Feb 2025 10:03:31 +0800 Subject: [PATCH] vault backup: 2025-02-27 10:03:30 --- 工作OKRs/25.2-5 OKR.canvas | 2 +- .../一体化仿真软件组周报(第六十五期).pptx | Bin 1318139 -> 1319051 bytes 工作总结/团队周例会/25.2.25.md | 40 ++ 补课/多体动力学/04_orientation.ipynb | 348 ++++++++++++++++++ .../多体动力学/04_orientations_of_ref_frames.md | 39 ++ 补课/多体动力学/05_vectors.ipynb | 0 补课/多体动力学/05_vectors.md | 0 补课/多体动力学/sympy_start.ipynb | 208 ++++++++++- 8 files changed, 625 insertions(+), 12 deletions(-) create mode 100644 工作总结/团队周例会/25.2.25.md create mode 100644 补课/多体动力学/04_orientation.ipynb create mode 100644 补课/多体动力学/04_orientations_of_ref_frames.md create mode 100644 补课/多体动力学/05_vectors.ipynb create mode 100644 补课/多体动力学/05_vectors.md diff --git a/工作OKRs/25.2-5 OKR.canvas b/工作OKRs/25.2-5 OKR.canvas index aff2e9f..347cc36 100644 --- a/工作OKRs/25.2-5 OKR.canvas +++ b/工作OKRs/25.2-5 OKR.canvas @@ -1,7 +1,7 @@ { "nodes":[ {"id":"b698e88ca5fb9c51","type":"text","text":"状态指标:\n推进OKR的时候也要关注这些事情,它们是完成OKR的保障。\n\n\n","x":-96,"y":80,"width":456,"height":347}, - {"id":"58be7961ae7275a7","type":"text","text":"# 计划\n这周要做的3~5件重要的事情,这些事情能有效推进实现OKR。\n\nP1 必须做。P2 应该做\n\nP1 多体原理学习 YouTube课程\nP1 根据HEROWind数据结构更新多体模块结构体\nP1 公共模块整理与探讨\nP1 气动模块联合调试,跑通\n","x":-620,"y":-307,"width":450,"height":347}, + {"id":"58be7961ae7275a7","type":"text","text":"# 计划\n这周要做的3~5件重要的事情,这些事情能有效推进实现OKR。\n\nP1 必须做。P2 应该做\n\nP1 多体原理学习 YouTube课程\nP1 根据HEROWind数据结构更新多体模块结构体\nP1 公共模块整理与探讨\nP1 气动模块联合调试,跑通\nP1 多体动力学节点细化\n","x":-620,"y":-307,"width":450,"height":347}, {"id":"2b068bfe5df15a72","type":"text","text":"# 目标:多体动力学模块完善\n### 每周盘点一下它们\n\n\n关键结果:建模原理、建模方法掌握 (5/10)\n\n关键结果:对标Bladed模块完成 (5/10)\n\n关键结果:风机多体动力学文献调研情况完成 (5/10)","x":-96,"y":-307,"width":456,"height":347}, {"id":"01ee5c157d0deeae","type":"text","text":"# 推进计划\n未来四周计划推进的重要事情\n\n文献调研启动\n\n建模重新推导\n\n\n","x":-620,"y":80,"width":456,"height":347} ], diff --git a/工作总结/周报/25.2.21汇总/一体化仿真软件组周报(第六十五期).pptx b/工作总结/周报/25.2.21汇总/一体化仿真软件组周报(第六十五期).pptx index 06a21ea05aeda6105e38bf11ccea714c6f843d67..7ad602122a51490a07d1bab4ee1536b7be7c1a69 100644 GIT binary patch delta 15081 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 Uh(JL}Lw=udprAyM0g%%F0bfHC>Hq)$ diff --git a/工作总结/团队周例会/25.2.25.md b/工作总结/团队周例会/25.2.25.md new file mode 100644 index 0000000..3595de9 --- /dev/null +++ b/工作总结/团队周例会/25.2.25.md @@ -0,0 +1,40 @@ + +推进设计流程编写,明确团队在设计流程中的位置,区分工作范围。20MW模型、设计好好规划一下。 + +跟曹老师再谈谈整机设计的 + +根据工作进展可以提前提报采购申请,团队的证据链清楚,申报时间,审批时间都很清楚,点到为止 + +培训计划,多次优化后断崖式领先其他团队,还是没被职能满意, + +2025年任务分得比较清楚,还都在做,这个星期集中审查一次,两个半天, + +软件组是标志性软件,比较重视软件,对科研来讲好开展,只要需求方参与,测试反馈,脑力要求比较高,基本功还是在专业上,规划的软件功能要清晰,界面友好,进度要有规划,尽可能早点,支撑科研任务,通过科研成果反馈校核迭代。软件工作要做规划,规划评审一下,开发者手册,框架、功能,早点评审,早点吸取建议 + +联培博士工作要重视,再找教授,看研究生部的要求,检查作业,学生向职业的转换过程中,确保能毕业 + +两重:要求全力以赴,全员参与,三个月了,可研报告有几稿了,是一个历练,知道可研工作怎么做,方案探讨工程,总结教训,能力不够,做的工作,科创部没法拍板,总结经验1 可研报告还没做完,就花大精力做ppt,不如把可研工作做扎实,有点投机取巧心理,不是踏踏实实做事情;2 可研报告大量注水,说的不痛不痒,通读不下去,主要内容看不到了,投机取巧心理;3 综合打捆,多个合一。失败损失的是信誉,以后做正确的也不会被相信。做什么事都要踏踏实实,投机取巧,害人害己。批下来后,怎么建设,怎么深化,招标方案,招标设计,招标设计,设计联络会,确定方案。 + +实验室月度例会:风电机组团队建设要加快,瞄准百人规模前进,今年计划83人;科创部指导下,可研要挖到根,追到底-变压器的;风机团队两重项目是重点,核心区平台也不要放松,材料经不经得起评审,怎么操作怎么执行,详细设计的问题,我们做还是招标后请别人做,招标完厂家要做详细设计,根据我们的方案是不是可操作,接下来分几个步骤,提前考虑,提前采购的 + +文档用AI + +边建设边科研边出成果,试验场地,利用总平台的左右,带动高质量参与,强调团队,不要担心来了没事干, + +碳捕集,每周一学习,学习实验室的制度,碳捕集内控责任书以及签了。利用体制机制优势开展科研工作,成果有益, + +对双聘人员,有些顾虑,回去后跟不上,实验室正在研究,新的做法再说,新员工培训形成常态机制 + +电缆团队,材料研究数字化开发探讨,汤,改变科研范式,赋予AI新的应用场景,大量使用博士生开展模型研究,大量重复性工作用AI做 + +2027年内预算可下达到团队,今年采购量特别大18个亿,如果有卡点尽快反馈,加快审批流程,被山西的院士从头骂到尾。采购提前,加强综合计划的分析,团队汇报要汇报相关内容,综合计划是什么,综合部留意一下 + +王书记,两会期间实验室安排要到位,303楼3楼理化实验室,单位较多,管理可能空缺 + +汤:1 签订责任书的单位根据责任书执行,要凝练科技问题,要善于报央企大腿,三不要,不要自大,不要当包工头,负责人们不要沽名钓誉,每周至少四天在实验室干活,半天一天到外面当专家 + +2 管理,二级院怎么管,还在探讨中,共建二级院,难度更大,尽快形成成熟管理模式,比较推崇南网管理模式,共建规则协议,三峡想拷贝,实验室不同意,核心是1配资1比1,南网下设自办机构,归南网管,借助实验室平台扩展一下科研渠道,智能电网2030给了13个项目。三峡认可实验室模式,资金支撑,人员支撑,落地示范支撑。管理没有放权到二级院,防止二级院把科研模式带回央企模式,知识产权布局要加快,结合试验平台,配置试验专责 + +3 实验室职能调整,成立采购处,知识产权分立,二级单位超过200人可以增设人事部,明确实验室总人数921人,职能部门加强服务,加强对两重的服务,团队不强是科创部不能拍板的主要原因。 + +4 启动内部审计,用权要自立,支持招标采购工作,团队权力很大,双聘人员不能成为潜伏人员,规范花钱,近五年要花150亿,今年总人数要达到2000人 \ No newline at end of file diff --git a/补课/多体动力学/04_orientation.ipynb b/补课/多体动力学/04_orientation.ipynb new file mode 100644 index 0000000..9b2143b --- /dev/null +++ b/补课/多体动力学/04_orientation.ipynb @@ -0,0 +1,348 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "import sympy as sm" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "sm.init_printing()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "theta, alpha = sm.symbols(\"theta, alpha\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}\\cos{\\left(\\theta \\right)} & \\sin{\\left(\\theta \\right)} & 0\\\\- \\sin{\\left(\\theta \\right)} & \\cos{\\left(\\theta \\right)} & 0\\\\0 & 0 & 1\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡cos(θ) sin(θ) 0⎤\n", + "⎢ ⎥\n", + "⎢-sin(θ) cos(θ) 0⎥\n", + "⎢ ⎥\n", + "⎣ 0 0 1⎦" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "B_C_A = sm.Matrix([[sm.cos(theta), sm.sin(theta), 0],\n", + " [-sm.sin(theta), sm.cos(theta), 0],\n", + " [0, 0, 1]])\n", + "B_C_A" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 0\\\\0 & \\cos{\\left(\\alpha \\right)} & \\sin{\\left(\\alpha \\right)}\\\\0 & - \\sin{\\left(\\alpha \\right)} & \\cos{\\left(\\alpha \\right)}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡1 0 0 ⎤\n", + "⎢ ⎥\n", + "⎢0 cos(α) sin(α)⎥\n", + "⎢ ⎥\n", + "⎣0 -sin(α) cos(α)⎦" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "C_C_B = sm.Matrix([[1, 0, 0],\n", + " [0, sm.cos(alpha), sm.sin(alpha)],\n", + " [0, -sm.sin(alpha), sm.cos(alpha)]])\n", + "C_C_B" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}\\cos{\\left(\\theta \\right)} & \\sin{\\left(\\theta \\right)} & 0\\\\- \\sin{\\left(\\theta \\right)} \\cos{\\left(\\alpha \\right)} & \\cos{\\left(\\alpha \\right)} \\cos{\\left(\\theta \\right)} & \\sin{\\left(\\alpha \\right)}\\\\\\sin{\\left(\\alpha \\right)} \\sin{\\left(\\theta \\right)} & - \\sin{\\left(\\alpha \\right)} \\cos{\\left(\\theta \\right)} & \\cos{\\left(\\alpha \\right)}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡ cos(θ) sin(θ) 0 ⎤\n", + "⎢ ⎥\n", + "⎢-sin(θ)⋅cos(α) cos(α)⋅cos(θ) sin(α)⎥\n", + "⎢ ⎥\n", + "⎣sin(α)⋅sin(θ) -sin(α)⋅cos(θ) cos(α)⎦" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "C_C_A = C_C_B * B_C_A\n", + "C_C_A" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "import sympy.physics.mechanics as me" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "A = me.ReferenceFrame('A')\n", + "B = me.ReferenceFrame('B')\n", + "C = me.ReferenceFrame('C')" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "B.orient_axis(A, theta, A.z)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAABcAAAAVCAYAAACt4nWrAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAABJ0AAASdAHeZh94AAAB4UlEQVR4nM3UTYhOcRTH8c+DCJGZhLBASiQ1E8lCCNmNDVITdmQxJfKyUMfZWGDJQhIbKRbyUhZkUlYsKDUoslASC5JoYmYs7v9hvDzTvFg4q/u/95zvOf9fv3tqfX19GkVmtmBjOV6KiK6GyX+JWiN4Zk7CI8xFDV1YGhFfBgsfNcC3U5iHPTiERTgxWDANJs/MrbiIIxGR5d0x7EdbRFwfNvxfxUCy/N/wMfWHzGzGQbRiPpoxAR/xDFdwcrhumYkDWIc5mFyaN2MFjuFeZk4c8uToxVPcxxu8x1gsxKaS24rdBmnJP9ySmbOwrNxkvOoH2oHFJeVORKwd0uSZ2YRzaCvARjF7MOBf4Djr5x4ZKMYNCZ6ZE1QT16MTO/EyInoy8xI29y/MzDZcLcf1EXE7M1eV2hq21N0yBaP71d6IiOcFPA1rfp8qIq7hdDmeycwZKllrOB8Rl+uyvMWH0gQOZ+Z09GEbpja4+V6sxgLVBp2OF+ig+DwivuFov6ImlecPlga3/kaOiM9oR08B96I9Ij79gJfE49iFJ/iKd7iA5XjdYHIq99QlHaXa/xjhViw6P1bJ9hAtKnmXRMSrYcMzs4ab2IAHWIm7qpt2Yt1ItmJHAXdjR0R0Yzs+q9y17zu2Cpf87xXnRgAAAABJRU5ErkJggg==", + "text/latex": [ + "$\\displaystyle \\mathbf{\\hat{a}_x}$" + ], + "text/plain": [ + "a_x" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A.x" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}\\cos{\\left(\\theta \\right)} & \\sin{\\left(\\theta \\right)} & 0\\\\- \\sin{\\left(\\theta \\right)} & \\cos{\\left(\\theta \\right)} & 0\\\\0 & 0 & 1\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡cos(θ) sin(θ) 0⎤\n", + "⎢ ⎥\n", + "⎢-sin(θ) cos(θ) 0⎥\n", + "⎢ ⎥\n", + "⎣ 0 0 1⎦" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "B.dcm(A)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "C.orient_axis(B, alpha, B.x)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 0\\\\0 & \\cos{\\left(\\alpha \\right)} & \\sin{\\left(\\alpha \\right)}\\\\0 & - \\sin{\\left(\\alpha \\right)} & \\cos{\\left(\\alpha \\right)}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡1 0 0 ⎤\n", + "⎢ ⎥\n", + "⎢0 cos(α) sin(α)⎥\n", + "⎢ ⎥\n", + "⎣0 -sin(α) cos(α)⎦" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "C.dcm(B)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}\\cos{\\left(\\theta \\right)} & \\sin{\\left(\\theta \\right)} & 0\\\\- \\sin{\\left(\\theta \\right)} \\cos{\\left(\\alpha \\right)} & \\cos{\\left(\\alpha \\right)} \\cos{\\left(\\theta \\right)} & \\sin{\\left(\\alpha \\right)}\\\\\\sin{\\left(\\alpha \\right)} \\sin{\\left(\\theta \\right)} & - \\sin{\\left(\\alpha \\right)} \\cos{\\left(\\theta \\right)} & \\cos{\\left(\\alpha \\right)}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡ cos(θ) sin(θ) 0 ⎤\n", + "⎢ ⎥\n", + "⎢-sin(θ)⋅cos(α) cos(α)⋅cos(θ) sin(α)⎥\n", + "⎢ ⎥\n", + "⎣sin(α)⋅sin(θ) -sin(α)⋅cos(θ) cos(α)⎦" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "C.dcm(A)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "A = me.ReferenceFrame(\"A\")\n", + "C = me.ReferenceFrame(\"C\")" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "psi, theta, phi = sm.symbols('psi, theta, varphi')" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "C.orient_body_fixed(A, (phi, theta, phi), 'ZXZ')" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}- \\sin^{2}{\\left(\\varphi \\right)} \\cos{\\left(\\theta \\right)} + \\cos^{2}{\\left(\\varphi \\right)} & \\sin{\\left(\\varphi \\right)} \\cos{\\left(\\theta \\right)} \\cos{\\left(\\varphi \\right)} + \\sin{\\left(\\varphi \\right)} \\cos{\\left(\\varphi \\right)} & \\sin{\\left(\\theta \\right)} \\sin{\\left(\\varphi \\right)}\\\\- \\sin{\\left(\\varphi \\right)} \\cos{\\left(\\theta \\right)} \\cos{\\left(\\varphi \\right)} - \\sin{\\left(\\varphi \\right)} \\cos{\\left(\\varphi \\right)} & - \\sin^{2}{\\left(\\varphi \\right)} + \\cos{\\left(\\theta \\right)} \\cos^{2}{\\left(\\varphi \\right)} & \\sin{\\left(\\theta \\right)} \\cos{\\left(\\varphi \\right)}\\\\\\sin{\\left(\\theta \\right)} \\sin{\\left(\\varphi \\right)} & - \\sin{\\left(\\theta \\right)} \\cos{\\left(\\varphi \\right)} & \\cos{\\left(\\theta \\right)}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡ 2 2 ↪\n", + "⎢ - sin (varphi)⋅cos(θ) + cos (varphi) sin(varphi)⋅cos(θ) ↪\n", + "⎢ ↪\n", + "⎢ 2 ↪\n", + "⎢-sin(varphi)⋅cos(θ)⋅cos(varphi) - sin(varphi)⋅cos(varphi) - sin (v ↪\n", + "⎢ ↪\n", + "⎣ sin(θ)⋅sin(varphi) ↪\n", + "\n", + "↪ ⎤\n", + "↪ ⋅cos(varphi) + sin(varphi)⋅cos(varphi) sin(θ)⋅sin(varphi)⎥\n", + "↪ ⎥\n", + "↪ 2 ⎥\n", + "↪ arphi) + cos(θ)⋅cos (varphi) sin(θ)⋅cos(varphi)⎥\n", + "↪ ⎥\n", + "↪ -sin(θ)⋅cos(varphi) cos(θ) ⎦" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "C.dcm(A)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Turtle", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/补课/多体动力学/04_orientations_of_ref_frames.md b/补课/多体动力学/04_orientations_of_ref_frames.md new file mode 100644 index 0000000..e0eb66f --- /dev/null +++ b/补课/多体动力学/04_orientations_of_ref_frames.md @@ -0,0 +1,39 @@ +Vectors +- magnitude 大小 +- direction 方向 +- sense 正负 + + +Unit vectors 模=1 + +Reference Frames +Euclidean 3D Space:all points in some 3D space + +Observer of position + motion + +motion is a function of the obsersiver's orientation + +Frame of reference "reference frame" is a set of all Euclidean points fixed to the observer. An abstraction to understand motion + +We will fix 3 right-handed mutually perpendiculur unit vectors to a reference frame and use them to determine orientation among reference frames + +互相垂直,右手坐标系,满足叉乘规律 + +Simple 2D orientation + +B关于A的的变换矩阵 ---- 方向余弦矩阵 direct cosine matrix or 旋转矩阵 rotation matrix of B with respect to A + +或者称之为 +Right handed rotation of B with respect to A about the shared Z unit vector through the angle theta + + +Successive Rotations + +C^[C]^A = C^[C]^B * B^[C]^A + + +Euler Angles +3 successive simple rotations about shared axes that allows for arbitrary orientation of two reference frames with two additional or auxiliary reference frames + + + diff --git a/补课/多体动力学/05_vectors.ipynb b/补课/多体动力学/05_vectors.ipynb new file mode 100644 index 0000000..e69de29 diff --git a/补课/多体动力学/05_vectors.md b/补课/多体动力学/05_vectors.md new file mode 100644 index 0000000..e69de29 diff --git a/补课/多体动力学/sympy_start.ipynb b/补课/多体动力学/sympy_start.ipynb index d343dbe..6c2b697 100644 --- a/补课/多体动力学/sympy_start.ipynb +++ b/补课/多体动力学/sympy_start.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -21,7 +21,7 @@ "(a, b, theta, gamma, x, t, y, z)" ] }, - "execution_count": 2, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -41,7 +41,7 @@ "f" ] }, - "execution_count": 5, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -53,7 +53,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 19, "metadata": {}, "outputs": [ { @@ -65,7 +65,7 @@ "sin(f(t)) - tan(a/b)/log(gamma)" ] }, - "execution_count": 4, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -77,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -89,7 +89,7 @@ "2*a*(tan(a/b)**2 + 1)*tan(a/b)/(b**3*log(gamma)) + (tan(a/b)**2 + 1)/(b**2*log(gamma))" ] }, - "execution_count": 6, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -99,11 +99,197 @@ "part2 = sm.diff(part1, b)\n", "part2" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Matrices & Linear Algebra" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}1 & 2\\\\3 & 4\\end{matrix}\\right]$" + ], + "text/plain": [ + "Matrix([\n", + "[1, 2],\n", + "[3, 4]])" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mat1 = sm.Matrix([[1, 2],[3, 4]])\n", + "mat1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Linear systems" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "lin_expr_1 = a * x +b**2*y + sm.sin(gama) *z" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle x \\sin{\\left(f{\\left(t \\right)} \\right)} + z \\log{\\left(f{\\left(t \\right)} \\right)}$" + ], + "text/plain": [ + "x*sin(f(t)) + z*log(f(t))" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lin_expr_2 = sm.sin(f(t)) *x + sm.log(f(t)) * z\n", + "lin_expr_2" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle a x + b^{2} y + z \\sin{\\left(\\gamma \\right)} = 0$" + ], + "text/plain": [ + "Eq(a*x + b**2*y + z*sin(gamma), 0)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sm.Eq(lin_expr_1, 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle x \\sin{\\left(f{\\left(t \\right)} \\right)} + z \\log{\\left(f{\\left(t \\right)} \\right)} = 0$" + ], + "text/plain": [ + "Eq(x*sin(f(t)) + z*log(f(t)), 0)" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sm.Eq(lin_expr_2, 0)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{x: -b**2*y*log(f(t))/(a*log(f(t)) - sin(gamma)*sin(f(t))),\n", + " z: b**2*y*sin(f(t))/(a*log(f(t)) - sin(gamma)*sin(f(t)))}]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res = sm.solve([lin_expr_1, lin_expr_2], x, z, dict = True)\n", + "res" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{x: -b**2*y*log(f(t))/(a*log(f(t)) - sin(gamma)*sin(f(t))),\n", + " z: b**2*y*sin(f(t))/(a*log(f(t)) - sin(gamma)*sin(f(t)))}" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res_dict = res[0]\n", + "res_dict" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle x = - \\frac{b^{2} y \\log{\\left(f{\\left(t \\right)} \\right)}}{a \\log{\\left(f{\\left(t \\right)} \\right)} - \\sin{\\left(\\gamma \\right)} \\sin{\\left(f{\\left(t \\right)} \\right)}}$" + ], + "text/plain": [ + "Eq(x, -b**2*y*log(f(t))/(a*log(f(t)) - sin(gamma)*sin(f(t))))" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sm.Eq(x, res_dict[x])" + ] } ], "metadata": { "kernelspec": { - "display_name": "blade", + "display_name": "Turtle", "language": "python", "name": "python3" }, @@ -117,7 +303,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.16" + "version": "3.11.8" } }, "nbformat": 4,