科学计算语言Julia编程初步

news2024/12/24 22:13:22

文章目录

    • 安装
    • 基本类型和计算
    • 函数初步
    • 条件和判断
    • 循环
    • 向量计算

Julia号称有着比肩C的速度,同时又像Python一样便捷的编程语言,非常适合科研狗使用。之前写了很多博客介绍Julia在数值分析中的应用,这次写一个适合初学者学习的Julia教程系列。

安装

Julia可以在中文社区下载:下载 Julia,正常安装即可,无坑。

但比较骚的是,Julia可以用Python安装

pip install jill
jill install [VERSION] [--upstream UPSTREAM] [--confirm]

在Julia中,需要经常下载安装一些库,如果担心网速,可以换源,其方法是:新建环境变量JULIA_PKG_SERVER,内容任选其一

  • BFSU 北外开源镜像站: https://mirrors.bfsu.edu.cn/juliaTUNA
  • 清华大学开源铆像站: https://mirrors.tuna.tsinghua.edu.cn/juliaSJTUG
  • 上交Linux 用户组: https://mirrors.sjtug.sjtu.edu.cn/julia

如果习惯用VS Code写代码,可以配置VS Code的Julia环境:VS Code打造Julia IDE

基本类型和计算

Julia支持四则混合运算,加减乘除以及乘方分别是+, -, *, /, ^这五个运算符。在交互运算时,会有一个自动创建的ans变量表示运算结果,下面在命令行中做一个演示

1 + 2*3 - 4^5   # -1017
ans     # 返回值为-1017

上面代码中,#用于注释,如果是多行注释,首尾标记分别是#==#

字符用单引号表示,字符串用双引号,多行字符串需要用三个双引号头尾括起来。

Julia和经典语言不同的是,提供了符号这种数据类型,并以:作为变量名的第一个字符,一般用来保存变量名。这里只是简单提一嘴,以后在Julia中见到冒号开头的变量别慌就行。

函数初步

在Julia中,可以非常复合直觉地创建函数,例如下面的表达式是完全合理的,而且功能也和你想的功能一模一样。

f(x) = x^2 + 1
f(5)        # 返回26

如果函数内容比较复杂,则需使用function关键字,创建一个程序块,并以end作为结束符。其最后一行表达式的结果,便是函数的返回值,比如函数f可以写为下列形式。

function f(x)
    x^2 + 1
end

函数返回值也可以用return来标识,并且return可以返回多个值

function getMinMax(x, y)
    return min(x, y), max(x, y)
end

getMinMax(10, 5)    # 返回值为 (5, 10)

条件和判断

在编程宇宙,if是通用的条件分支结构关键字,当if后面的条件为真时,即执行代码块中的内容。在Julia中,其完整格式是if...elseif...else...end,当然elseifelse是可选的,下面创建一个函数来演示

function testIf(x)
    if x < 60
        println("不及格")
    elseif x < 75
        println("及格")
    elseif x < 90
        println("良好")
    else
        println("优秀")
    end
end
testIf(5)       # 不及格

Julia中的比较运算包括==,!=, <, <=, >, >=,分别表示等于、不等于、小于、小于等于、大于、大于等于。这几个运算符可以独立于if语句使用,计算结果为布尔型,true表示真,false表示假。

3 < 5       # 返回true

julia还提供了C风格的三元运算符a ? x : y,即a为真时执行x,否则执行y,有了这个,可以写一个非常简洁的递归阶乘函数

function fac(n)
    n > 1 ? n*fac(n-1) : 1
end

fac(5)      # 120

循环

julia支持for循环和while循环,循环之家可以嵌套,但每层嵌套都需要有end作为结束标志。for循环示例如下

for i=1:3
    println(i, "^3 = ", i^3)
end
#= 输出如下
1^3 = 1
2^3 = 8
3^3 = 27
=#

在Julia中,每一个end都会封死一层变量作用域,就像在函数中的变量无法被外部调用一样,循环亦然,比如刚刚尽管用i循环三次并输出了计算结果,但并不能事后调用

println(i)      # 报错 i not defined

为了让变量可以穿透循环,就需要用到关键字global,表示当前使用的是一个全局变量,下面演示一下while循环

j = 0
s = 0
while j < 3
    j += 1
    global j2 = j^2
    s += j2
end 
println(s, j2)

向量计算

Julia作为以科学计算为目标的语言,对向量和矩阵的计算有着非常良好的支持。通过方括号可以创建行向量、列向量以及矩阵,这些数学对象在编程语言中可以统称为数组

x = [1 2 3 4 5] # 此为行向量 1×5 Matrix{Int64}
y = [1,2,3,4,5] # 此为列向量 5-element Vector{Int64}
z = [1 2 3, 4 5 6]  # 此为2行3列的矩阵 2×3 Matrix{Int64}

若想对数组进行计算,那么需要在原有的运算符前加一个点

x + 1   # 报错
x .+ 1  # 返回 2  3  4  5  6

Julia支持自动广播,即行向量和列向量相加时,会自动扩展成矩阵

> x .+ y

其返回值为

[ 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 6 7 8 9 10 ] \begin{bmatrix} 2&3&4&5& 6\\ 3&4&5&6& 7\\ 4&5&6&7& 8\\ 5&6&7&8& 9\\ 6&7&8&9&10\\ \end{bmatrix} 23456345674567856789678910

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1123689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

客户转化率太低?CRM客户管理系统来帮您

客户是否准确真实、销售跟进策略是否有效、销售跟进流程是否及时等&#xff0c;这些都是影响客户转化的因素。为了提高客户转化率&#xff0c;不少企业开始使用CRM销售管理系统。下面说说销售如何通过CRM系统提高客户转化率&#xff1f; 1、CRM能够识别不同渠道线索质量 CRM系…

开源CasaOS云软件发现关键漏洞

近日&#xff0c;开源 CasaOS 个人云软件中发现的两个严重的安全漏洞。该漏洞一旦被攻击者成功利用&#xff0c;就可实现任意代码执行并接管易受攻击的系统。 这两个漏洞被追踪为CVE-2023-37265和CVE-2023-37266&#xff0c;CVSS评分均为9.8分。 发现这些漏洞的Sonar安全研究…

【数据结构】线性表(十)队列:循环队列及其基本操作(初始化、判空、判满、入队、出队、存取队首元素)

文章目录 队列1. 定义2. 基本操作 顺序队列循环队列1. 头文件和常量2. 队列结构体3. 队列的初始化4. 判断队列是否为空5. 判断队列是否已满6. 入队7. 出队8. 存取队首元素9. 获取队列中元素个数10. 打印队列中的元素9. 主函数10. 代码整合 堆栈Stack 和 队列Queue是两种非常重要…

首次扭亏为盈后,货拉拉还想靠造车更上一层楼?

前阵子&#xff0c;一句【货拉拉“拉不拉”拉布拉多&#xff0c;取决于货拉拉“拉”拉布拉多时拉布拉多“拉”得多不多】的趣梗在网上掀起了一波热潮。而热梗背后的主角货拉拉&#xff0c;近期又透露出了谋求港股上市的消息&#xff0c;进而在市场上又掀起了一波热潮。 招股书…

Java拦截器(Interceptor)和过滤器(Filter)实例详解

一、Java过滤器和拦截器 1.1、过滤器(Filter) Filter过滤器&#xff0c;是Servlet&#xff08;Server Applet&#xff09;技术中的技术&#xff0c;开发人员可以通过Filter技术&#xff0c;管理web资源&#xff0c;可以对指定的一些行为进行拦截&#xff0c;例如URL级别的权限…

程序员的金饭碗在哪里?这几个网站建议收藏!帮助你一步登天

俗话说的好&#xff0c;一个趁手的工具抵过诸葛亮。尤其是在程序员这个领域&#xff0c;不仅是一个非常和科技挂钩的领域&#xff0c;而且更新速度非常的迅速。 连java python都在更新&#xff0c;手头上写码的工具却还是老三样怎可行&#xff1f;这就需要我们跟上时代的脚步&…

全局下载报错怎么办

举个例子&#xff0c;当你要全局下载create-react-app&#xff0c;报如下图所示的错 这个时候&#xff0c;关闭掉git base,再以管理员身份运行 你再次下载&#xff0c;ok了

【网络】对于我前面UDP博客的补充

UDP 前言正式开始UDP报文UDP报文如何将UDP报文和报头进行分离和封装UDP如何将有效载荷交付给上层如何提取出完整报文报头是啥报头中的检验和 UDP的特点IO接口乱序问题UDP是全双工的注意事项基于UDP的应用层协议 再次谈论端口五元组端口号范围划分netstatxargs 前言 本篇比较偏…

C#调用C++ 的DLL传送和接收中文字符串

1 c#向c传送中文字符串 设置&#xff1a;将 字符集 改为 使用多字节字符集 cpp代码&#xff1a; extern "C"_declspec(dllexport) int input_chn_str(char in_str[]) {cout<<in_str<<endl;return 0; }c#代码&#xff1a; [DllImport("Demo.dll…

uni-app:引用文件的方法

绝对定位 ①import common from "/utils/common.js" ②import common from "utils/common.js" <template><view></view> </template> <script>import common from "/utils/common.js"export default {data() {ret…

分享一下抽奖活动小程序怎么做

在当今数字化时代&#xff0c;抽奖活动小程序已成为一种高效、创新的营销方式。它不仅能够吸引用户的注意力&#xff0c;提高品牌知名度&#xff0c;还能促进用户参与度&#xff0c;增强用户对品牌的忠诚度。本文将详细介绍如何制作一个成功的抽奖活动小程序&#xff0c;以及它…

[yolo系列:如何固定随机种子(以yolov7为例)]

文章目录 概要随机种子&#xff08;Random Seed&#xff09;第一步第二步第三步第四步 概要 在计算机科学和深度学习领域&#xff0c;随机性是一个常见而重要的概念。在一些情况下&#xff0c;我们需要确保代码每次运行时都能得到相同的随机结果&#xff0c;以便进行模型的可重…

SAR ADC:10 bit 串口控制的模数转换器MS1549,可替TLV1549

MS1549 是一个 10 位开关电容器、逐次逼近型的模数转换 器。此芯片有 2 个数字输入端、 1 个三态输出口&#xff08;包括片选端 口 ( CS ) 、 1 个 I/O CLOCK 端口和 1 个数字输出端 (DATA OUT) &#xff09;&#xff0c; 可以实现三总线接口到总控制器的串行口的数据传输…

正点原子嵌入式linux驱动开发——异步通知

上一篇笔记中使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的&#xff0c;对于非阻塞方式来说还需要应用程序通过poll函数不断的轮询。最好的方式就是驱动程序能主动向应用程序发出通知&#xff0c;报告自己可以访问&#xff0c;然后应用程序再从驱动程序中…

Redis持久化解析:全面了解Redis的数据持久化机制

文章目录 &#x1f34a; Redis持久化&#x1f389; 什么是持久化&#xff1f;&#x1f389; 持久化的原理&#x1f4dd; RDB持久化&#x1f4dd; AOF持久化&#x1f4dd; 混合持久化&#x1f4dd; save与bgsave &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领…

使用 VS 2022 开发C#项目的tips

代码操作 删除注释或空行 参考C#【必备技能篇】Visual Studio删除所有的注释和空行 删除所有行注释&#xff1a;包括行内和行外&#xff0c;如下所示 Ctrl H 替换&#xff0c;第一行输入&#xff1a;//[^\n]*\n, 第二行输入&#xff1a;\n。替换即可。 这一步可能出现很多空…

数据结构题型20-第七章 查找

文章目录 1 考察重点2 知识框架3 考察重点4 顺序查找和折半查找4.1 顺序查找4.1.1 一般线性表的顺序查找4.1.2 有序表的顺序查找 4.2 折半查找4.3 分块查找 1 考察重点 2 知识框架 3 考察重点 4 顺序查找和折半查找 4.1 顺序查找 4.1.1 一般线性表的顺序查找 4.1.2 有序表的顺…

基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统

基于Django开发的图书管理推荐、电影推荐、课程推荐系统、大众点评店铺推荐系统、健身课程管理系统、资讯推荐系统 一、简介 推荐系统的目的是信息过载所采用的措施&#xff0c;面对海量的数据&#xff0c;从中快速推荐出用户可能喜欢的物品。 推荐系统的方法有以下几种&…

顺序栈的实现----数据结构

栈的概念 对于栈&#xff08;Stack&#xff09;&#xff0c;后进先出&#xff08;Last In First Out&#xff0c;LIFO&#xff09;&#xff0c;栈也是一种线性表&#xff0c;只不过是一种操作受限的线性表&#xff0c;只能在一端操作&#xff0c;也就是不允许在中间进行查找、…

javaEE -4(11000字详解多线程)

一&#xff1a;常见的锁策略 1.1 乐观锁 vs 悲观锁 乐观锁和悲观锁是并发控制的两种不同策略&#xff0c;用于处理多个线程同时访问共享资源的情况。它们的主要区别在于对并发冲突的处理方式。 悲观锁是一种较保守的并发控制策略&#xff0c;它假设在整个事务过程中会发生冲…