Playground -swift01基础学习

本文介绍了Swift编程语言的基础知识,包括变量定义、数据类型转换、数组和字典操作、条件语句和循环控制、函数定义及使用、类的基本概念等内容。
//: Playground - noun: a place where people can play
//
//  test1.swift
//  swift02
//
//  Created by 张建 on 16/9/23.
//  Copyright © 2016年 zhangjian. All rights reserved.
//

import UIKit

var str = "Hello, playground"


//定义变量用var 常量用let
var myVar = 50
let myLet = 100

let myDouble:Double = 700
let myLett:Float = 4

let label = "The width is"
let width = 250
//会将width类型转化为String类型
let widthLabel = label + String(width)
//以下做法会出现类型不同,编译器无法通过,报错.
//let widthLabel = label + width

//有种更简单的方法是:把值写到括号中,并且在括号之前写一个反斜杠.例如
let apple = 5
let orange = 6
let appleSum = "I have \(apple)apples."
let fruitSum = "I have \(apple + orange)pieces of fruit."


//练习: 使用 \() 来把一个浮点计算转换成字符串,并加上某人的名字,和他打个招呼

let myApp = "My Name is"
let myName = "chenmeng"
let myRmb:Double = 100
let myAppSum = myApp + myName + "I have \(myRmb)yuan."

//使用方括号 [] 来创建数组和字典,并使用下标或者键(key)来访问元素。

var shoppingList = ["catfish", "water", "tulips", "blue paint"];
//shoppingList[1] = "bottle of water"

var occ = [
"shanxi":"datong",
"henan":"zhenzhou"
]

//occ["shanxi"] = "public"

//要创建一个空数组或者字典,使用初始化语法。

let emptyArray = [String]()
let emptyDictionary = [String:Float]()
//如果类型信息可以被推断出来,你可以用 [] 和 [:] 来创建空数组和空字典——就像你声明变量或者给函数传参数 的时候一样。
*/



//使用 if 和 switch 来进行条件操作,使用 for-in 、 for 、 while 和 repeat-while 来进行循环。包裹条件和循环 变量括号可以省略,但是语句体的大括号是必须的。
//以下语句会报错,因为if语句中,条件必须是一个布尔表达式
//let mathScores = [88,99,56,89,70,46]
//var teamScore = 0
//for score in mathScores{
//
//    if score > 50{
//        teamScore += 3
//    }else{
//        teamScore +=5
//    }
//
//}
//
//print(teamScore)

//你可以一起使用 if 和 let 来处理值缺失的情况。这些值可由可选值来代表。一个可选的值是一个具体的值或者是 nil 以表示值缺失。在类型后面加一个问号来标记这个变量的值是可选的。

//
//使用 for-in 来遍历字典,需要两个变量来表示每个键值对。字典是一个无序的集合,所以他们的键和值以 任意顺序迭代结束。
let interestingNumbers = [
    "Prime": [2, 3, 5, 7, 11, 13],
    "Fibonacci": [1, 1, 2, 3, 5, 8],
    "Square": [1, 4, 9, 16, 25],
]

var largest = 0

for(kind, numbers)in interestingNumbers{
    for number in numbers{
        if number > largest{
            largest = number
        }
    }
}
print(largest)

//使用 while 来重复运行一段代码直到不满足条件。循环条件也可以在结尾,保证能至少循环一次。

var n = 2
while n < 100{
    n = n * 2;
}
print(n)

var m = 2
repeat {
  m = m * 2;
}while m < 100
print(m)

//你可以在循环中使用 ..< 来表示范围,也可以使用传统的写法,两者是等价的:
//使用 ..< 创建的范围不包含上界,如果想包含的话需要使用 ...
var firstForLoop = 0
for i in 0..<4{
    firstForLoop += i
}
print(firstForLoop)

var secondForLoop = 0
for var j = 0; j < 4; ++j{
    secondForLoop += j
}
print(secondForLoop)




//使用 func 来声明一个函数,使用名字和参数来调用函数。使用 -> 来指定函数返回值的类型。

func greet(name:String, day:String) ->NSString{
    return "Hello \(name),today is \(day)."
}

greet("zhangjian", day: "Tuesday")

//练习: 删除 day 参数,添加一个参数来表示今天吃了什么午饭。
func eat(name:String, food:String) ->NSString{
    return "Hello \(name),eat \(food)."
}
eat("Jackchen", food: "apple")

//使用元组来让一个函数返回多个值。该元组的元素可以用名称或数字来表示
func calculateStatistics(scores:[Int])->(min:Int, max:Int, sum:Int, ave:Int){
    //使用初始化
    var min = scores[0]
    var max = scores[0]
    var sum = 0
    var ave = 0
    
    for score in scores{
        if score > max{
            
            max = score
        }else if score < min{
            min = score
        }
        
        sum += score
        ave = sum/scores.count
    }
    return (min,max,sum, ave)
}

let statistics = calculateStatistics([5, 3, 100, 99, 3])
print(statistics.sum)
print(statistics.2)
print(statistics.min)
print(statistics.max)
print(statistics.0)
print(statistics.1)
print(statistics.ave)

//函数可以带有可变个数的参数,这些参数在函数内表现为数组的形式:
func sumOf(numbers:Int...)->Int{
    var sum = 0
    for number in numbers{
        sum += number
    }
    return sum
}

sumOf()
sumOf(33, 33, 55, 34)

//函数可以嵌套。被嵌套的函数可以访问外侧函数的变量,你可以使用嵌套函数来重构一个太长或者太复杂的函
//数。
func returnFifteen() ->Int{
    
    var y = 10
    func add(){
        y += 5
    }
    add()
    return y
}
returnFifteen()

//函数是第一等类型,这意味着函数可以作为另一个函数的返回值。
func makeIncrementer() ->(Int ->Int){
    
    func addOne(number: Int) -> Int{
        return 1 + number
    }
    return addOne
}

var increment = makeIncrementer()
increment(10)

//函数也可以当做参数传入另一个函数。
func hasAnyMatches(list:[Int], condition:Int ->Bool) ->Bool{
    
    for item in list{
        if condition(item){
            return true
        }
    }
    return false
}

func lessThanTen(number:Int) ->Bool{
    return number < 10
}

var numbers = [20, 50, 3, 22]
hasAnyMatches(numbers, condition: lessThanTen)

//函数实际上是一种特殊的闭包:它是一段能之后被调取的代码。闭包中的代码能访问闭包所建作用域中能得到的变 量和函数,即使闭包是在一个不同的作用域被执行的 - 你已经在嵌套函数例子中所看到。你可以使用 {} 来创建一 个匿名闭包。使用 in 将参数和返回值类型声明与闭包函数体进行分离。

numbers.map ({
    (number:Int) -> Int in
    let result = 3 * number
    return result
})
//有很多种创建更简洁的闭包的方法。如果一个闭包的类型已知,比如作为一个回调函数,你可以忽略参数的类和返回值。单个语句闭包会把它语句的值当做结果返回。
let mappedNumbers = numbers.map({ number in 3 * number })
print(mappedNumbers)


//使用 class 和类名来创建一个类。类中属性的声明和常量、变量声明一样,唯一的区别就是它们的上下文是 类。同样,方法和函数声明也一样。
class Shape{
    var numberOfSides = 0
    func simpleDescription() ->String {
        return " A Shape with \(numberOfSides)sides..."
    }
}

//要创建一个类的实例,在类名后面加上括号。使用点语法来访问实例的属性和方法。
var shape = Shape()
shape.numberOfSides = 10
var shapeDescription = shape.simpleDescription()

class NamedShape {
    var numberOfSides: Int = 0
    var name: String
    init(name: String) { self.name = name
    }
    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides."
    } }



内容概要:本文针对间歇性光伏出力导致的48V直流母线电压波动问题,研究并构建了一套储能系统双向充放电闭环调控体系,旨在实现离网型直流微网的功率动态平衡与电压稳定控制。通过Simulink搭建包含光伏阵列、Boost DC-DC变换器、负载、双向DC-DC变换器及锂离子电池的完整直流微网系统模型,重点解决光伏发电波动引起的功率供需失衡难题。采用最大功率点跟踪(MPPT)技术提升光伏能量捕获效率,并结合储能系统的双向调节能力,实施削峰填谷策略,实现能量的时空转移与动态补偿。研究涵盖系统建模、控制策略设计、仿真验证全流程,确保在光照变化、负载突变等复杂工况下母线电压的稳定性,提升微网系统的电能质量和运行可靠性。; 适合人群:具备电力电子、自动控制或新能源系统等相关专业知识背景,从事微电网、分布式能源、储能控制等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于离网光伏直流微网系统的仿真建模与稳定性分析;②掌握MPPT控制与储能双向DC-DC变换器的协同调控技术;③实现直流母线电压的精确稳定控制与系统功率动态平衡的闭环设计;④为实际光伏储能系统的设计、优化与工程应用提供理论依据与仿真技术支持。; 阅读建议:建议结合Simulink仿真环境动手实践,重点关注控制策略的实现逻辑、控制器参数整定方法,并可通过设置光照强度突变、负载跳变等多种动态工况来验证系统的鲁棒性与适应性,深化对系统动态行为的理解。
内容概要:本文针对传统三电平并网逆变器存在的谐波含量高、电网不平衡工况适应性差及动态响应慢等问题,提出一种基于有源中点箝位(ANPC)三电平逆变器的高性能并网控制策略。通过融合双极性倍频脉宽调制(DPWMA)、正负序分离锁相技术与电网电压前馈控制,构建了一体化的复合控制体系。ANPC拓扑凭借其开关损耗均衡、输出谐波低和中点电位可控等优势,为系统提供了优良的硬件基础;DPWMA调制在不增加器件实际开关频率的前提下显著提升等效开关频率,优化输出波形质量;正负序分离技术有效解决电网不平衡导致的锁相失真问题,确保并网电流对称;电网电压前馈控制则提前补偿扰动,增强系统动态响应与抗扰能力。结合三层控制架构(信号采集、核心控制、调制驱动),并通过Simulink仿真验证了系统在稳态、不平衡及动态扰动工况下的优越性能,证明该方案可显著提升电能质量、运行稳定性与工况适应性。; 适合人群:从事电力电子、新能源并网、智能电网及相关领域的科研人员、电气工程专业研究生及高年级本科生,以及具备一定电力系统与控制理论基础的工程技术人员。; 使用场景及目标:①用于大功率新能源发电系统(如光伏、风电)的高性能并网逆变器设计与优化;②解决电网电压不平衡、畸变等复杂工况下的并网稳定性问题;③提升逆变器动态响应能力,适用于对电能质量要求较高的工业与电网应用场景;④为相关课题的仿真研究、论文复现与科研项目提供技术支持与方案参考。; 阅读建议:此资源以理论分析与仿真验证相结合的方式呈现,建议读者结合文中提到的Simulink模型进行实操复现,深入理解各控制模块的设计逻辑与协同机制,重点关注DPWMA调制实现、正负序分离算法及前馈-反馈控制结构的搭建,以实现从理论到仿真的完整闭环学习
内容概要:本文研究了含电动汽车、光伏及储能接入的输配协同(输电网-配电网)日前优化模型,并通过Matlab代码实现。该模型聚焦于新能源大规模接入背景下电力系统的协调优化问题,重点解决电网在面对高比例可再生能源、储能设备以及电动汽车等灵活负荷时的日前调度挑战。文中提出的方法整合了源---储多主体协同优化机制,充分考虑了光伏发电的间歇性、储能系统的充放电特性以及电动汽车的时空分布与充电需求,构建了以系统运行成本最小化或可再生能源消纳最大化为目标的混合整数规划模型。通过Matlab平台进行建模与求解,验证了该模型在提升系统经济性、增强电网稳定性及促进清洁能源高效利用方面的有效性。同时,文章还通过多场景对比分析,展现了模型对不同类型运行条件的适应能力与鲁棒性。; 适合人群:具备电力系统基础知识和一定Matlab编程能力的研究生、科研人员及从事能源系统规划与运行的工程技术人员。; 使用场景及目标:①用于研究高比例可再生能源接入下的电网日前调度优化;②支撑含分布式能源、储能与电动汽车的综合能源系统建模与仿真;③为电力市场环境下源网荷储协同运行策略的设计提供技术参考。; 阅读建议:此资源侧重于模型构建与算法实现,建议读者结合文中所述的优化思路与Matlab代码进行实操演练,深入理解约束条件设定、目标函数构造及求解器调用等关键环节,并尝试扩展至多时间尺度或多目标优化场景以提升应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值