科学计算语言Julia编程初步

文章目录

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

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)
endgetMinMax(10, 5)    # 返回值为 (5, 10)

条件和判断

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

function testIf(x)if x < 60println("不及格")elseif x < 75println("及格")elseif x < 90println("良好")elseprintln("优秀")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
endfac(5)      # 120

循环

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

for i=1:3println(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 < 3j += 1global j2 = j^2s += 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.mzph.cn/news/115259.shtml

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

相关文章

中科芯与IAR共建生态合作,IAR集成开发环境全面支持CKS32系列MCU

中国上海–2023年10月18日–嵌入式开发软件和服务的全球领导者IAR今日宣布&#xff0c;与中科芯集成电路有限公司&#xff08;以下简称中科芯&#xff09;达成生态合作&#xff0c;IAR已全面支持CKS32系列MCU的应用开发。这一合作将进一步推动嵌入式系统的发展&#xff0c;并为…

【吞噬星空】战神宫全体投票,为罗峰脱罪,徐欣补办婚礼,洪成功恢复脑电波

【侵权联系删除】【文/郑尔巴金】 吞噬星空动画第90集即将更新&#xff0c;官方相当给力&#xff0c;提前曝光了图文情报与先行预告。虽然罗峰与巴巴塔尚未正式开始闯荡宇宙&#xff0c;但却是斩杀阿特金三大巨头的平稳生活。不但有战神宫为罗峰脱罪&#xff0c;而且还给徐欣补…

Linux安装Redis(这里使用Redis6,其它版本类似)

目录 一、选择需要安装的Redis版本二、下载并解压Redis三、编译安装Redis四、启动Redis4.1、修改配置文件4.2、启动 五、测试连接5.1、本地连接使用自带客户端redis-cli连接操作redis5.2、外部连接使用RedisDesktopManager操作redis 六、关闭Redis七、删除Redis 一、选择需要安…

java的网络编程

网络编程 网络编程&#xff1a;java语言支持网络间的数据传输&#xff0c;将底层的细节封装起来了&#xff0c;给程序员提供了一套标准类库&#xff0c;方便java开发出可以进行网络通信的软件 核心问题&#xff1a;如何找到网络世界中的目标主机&#xff0c;和目标软件&#…

ts json的中boolean布尔值或者int数字都是字符串,转成对象对应类型

没啥好写的再水一篇 json中都是字符串&#xff0c;转换一下就好&#xff0c;简单来说就是转换一次不行&#xff0c;再转换换一次&#xff0c;整体转换不够&#xff0c;细分的再转换一次 这是vue中 ts写法 ,我这里是拿对象做对比&#xff0c;不好字符和对象做对比&#xff0c;…

【Chrome】使用k8s、docker部署无头浏览器Headless,Java调用示例

什么是无头浏览器&#xff1f; 无头浏览器是一种没有图形用户界面的浏览器。无头浏览器不通过其图形用户界面(GUI)控制浏览器的操作&#xff0c;而是使用命令行。 为什么要用Chrome无头&#xff1f; Chrome Headless用于抓取(谷歌)、测试(开发者)和黑客(黑客)。搜索引擎&…

倾斜摄影三维模型根节点合并技术方法探讨

倾斜摄影三维模型根节点合并技术方法探讨 倾斜摄影技术是一种通过无人机或其他航空器采集大量高分辨率照片&#xff0c;并使用特殊软件将这些照片拼接成三维模型的方法。在这个过程中&#xff0c;摄影机以倾斜角度拍摄照片&#xff0c;从而捕捉到目标物体的多个视角&#xff0c…

LTE系统TDD无线帧结构特点

LTE系统TDD无线帧结构的特点主要表现在以下几个方面&#xff1a; 无线帧结构时间描述的最小单位是采样周期Ts。在LTE中&#xff0c;每个子载波为2048阶IFFT采样&#xff0c;△f15kHz&#xff0c;因此采样周期Ts1/(204815000)0.033us。 TDD的帧结构包括两个5ms的半帧&#xff0…

特殊类设计

文章目录 特殊类设计1. 请设计一个类&#xff0c;不能被拷贝2. 请设计一个类&#xff0c;只能在堆上创建对象3. 请设计一个类&#xff0c;只能在栈上创建对象4. 请设计一个类&#xff0c;不能被继承5. 单例模式5.1 设计模式5.2 单例模式(1) 饿汉模式(2) 懒汉模式 特殊类设计 1…

python如何创建自己的对冲交易算法

在这篇文章中&#xff0c;我解释了如何创建一个人工智能来每天为我进行自动交易。 随着机器学习的现代进步和在线数据的轻松访问&#xff0c;参与量化交易变得前所未有的容易。为了让事情变得更好&#xff0c;AWS 等云工具可以轻松地将交易想法转化为真正的、功能齐全的交易机器…

UDP网络通信反复发收

package UDP2;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner;/* * 完成UDP 通信快速入门 实现发1收1*/ public class Client {public static void main(String[] args) throws Exception{// …

k8s的coreDNS添加自定义hosts

1.ack的hosts不会继承宿主机的hosts&#xff0c;而工作中有一个域名默认是走内网解析&#xff0c;内网被限制访问了&#xff0c;只能在coreDNS中加一个hosts解析域名 2.编辑configmap (coredns) kubectl edit configmap -n kube-system coredns 增加hosts节点 Corefile: |.:53…

VMware Workstation安装ESXi和vCenter(8.0)

一、环境准备 虚拟机&#xff1a;VMware Workstation 17 Pro ESXi&#xff1a;ESXi-8.0U2-22380479-standard vCenter&#xff1a;VMware-VCSA-all-8.0.2-22385739.iso 主要是内存设置&#xff0c;因为vCenter需要14Gb内存&#xff0c;所以这个至少16Gb。 硬盘需要2块&…

S4.2.4.3 Electrical Idle Sequence(EIOS)

一 本章节主讲知识点 1.1 EIOS的具体码型 1.2 EIOS的识别规则 1.3 EIEOS的具体码型 二 本章节原文翻译 当某种状态下&#xff0c;发送器想要进入电器空闲状态的时候&#xff0c;发送器必须发送EIOSQ&#xff0c;也既是&#xff1a;电器Electrical Idle Odered Set Sequenc…

Flink部署模式及核心概念

一.部署模式 1.1会话模式&#xff08;Session Mode&#xff09; 需要先启动一个 Flink 集群&#xff0c;保持一个会话&#xff0c;所有提交的作业都会运行在此集群上&#xff0c;且启动时所需的资源以确定&#xff0c;无法更改&#xff0c;所以所有已提交的作业都会竞争集群中…

SpringBoot+Vue实现AOP系统日志功能

AOP扫盲&#xff1a;Spring AOP (面向切面编程&#xff09;原理与代理模式—实例演示 logs表&#xff1a; CREATE TABLE logs (id int(11) NOT NULL AUTO_INCREMENT,operation varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 操作名称,type varchar(255) COLL…

pnpm ERR_PNPM_ADDING_TO_ROOT

ERR_PNPM_ADDING_TO_ROOT  Running this command will add the dependency to the workspace root, which might not be what you want - if you really meant it, make it explicit by running this command again with the -w flag (or --workspace-root). If you don’t wa…

【剑指Offer】36.二叉搜索树与双向链表

题目 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围&#xff1a;输入二叉树的节点数 0≤n≤1000&#xff0c;二叉树中每个节点的值 0≤val≤1000 要求&#xff1a;O(1)&#xff08;即在原树上操作&#xff09;&#xff0c;时间…

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

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

thinkphp5.1 关联查询

关联查询使用with查询 $users User::with([profile > function($query) {$query->field(name,email); }])->select(); foreach ($users as $user) {echo $user->profile->name; } 如果查询数据时&#xff0c;没有数据&#xff0c;则不返回整条信息&#xff0c…